From b66eb296d182324c7b0f8fb7d3fa952cc42af16b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 11 Nov 2012 18:51:17 +0100 Subject: [PATCH] grub: Replace patches to have grub-set-default again. --- config/rootfiles/common/i586/grub | 33 +- lfs/grub | 7 +- src/patches/grub-fedora-18.patch | 48870 ---------------------------- src/patches/grub-gentoo-14.patch | 16087 +++++++++ 4 files changed, 16107 insertions(+), 48890 deletions(-) delete mode 100644 src/patches/grub-fedora-18.patch create mode 100644 src/patches/grub-gentoo-14.patch diff --git a/config/rootfiles/common/i586/grub b/config/rootfiles/common/i586/grub index 341d773e3c..43084f78e8 100644 --- a/config/rootfiles/common/i586/grub +++ b/config/rootfiles/common/i586/grub @@ -4,30 +4,29 @@ boot/grub/ipfire.xpm.gz boot/grub/stage1 boot/grub/stage2 #usr/bin/mbchk +usr/lib/grub +#usr/lib/grub/i386-pc +#usr/lib/grub/i386-pc/e2fs_stage1_5 +#usr/lib/grub/i386-pc/fat_stage1_5 +#usr/lib/grub/i386-pc/ffs_stage1_5 +#usr/lib/grub/i386-pc/iso9660_stage1_5 +#usr/lib/grub/i386-pc/jfs_stage1_5 +#usr/lib/grub/i386-pc/minix_stage1_5 +#usr/lib/grub/i386-pc/reiserfs_stage1_5 +#usr/lib/grub/i386-pc/stage1 +#usr/lib/grub/i386-pc/stage2 +#usr/lib/grub/i386-pc/stage2_eltorito +#usr/lib/grub/i386-pc/ufs2_stage1_5 +#usr/lib/grub/i386-pc/vstafs_stage1_5 +#usr/lib/grub/i386-pc/xfs_stage1_5 usr/sbin/grub -usr/sbin/grub-crypt usr/sbin/grub-install usr/sbin/grub-md5-crypt +usr/sbin/grub-set-default usr/sbin/grub-terminfo -usr/share/grub -#usr/share/grub/i386-pc -#usr/share/grub/i386-pc/e2fs_stage1_5 -#usr/share/grub/i386-pc/fat_stage1_5 -#usr/share/grub/i386-pc/ffs_stage1_5 -#usr/share/grub/i386-pc/iso9660_stage1_5 -#usr/share/grub/i386-pc/jfs_stage1_5 -#usr/share/grub/i386-pc/minix_stage1_5 -#usr/share/grub/i386-pc/reiserfs_stage1_5 -#usr/share/grub/i386-pc/stage1 -#usr/share/grub/i386-pc/stage2 -#usr/share/grub/i386-pc/stage2_eltorito -#usr/share/grub/i386-pc/ufs2_stage1_5 -#usr/share/grub/i386-pc/vstafs_stage1_5 -#usr/share/grub/i386-pc/xfs_stage1_5 #usr/share/info/grub.info #usr/share/info/multiboot.info #usr/share/man/man1/mbchk.1 -#usr/share/man/man8/grub-crypt.8 #usr/share/man/man8/grub-install.8 #usr/share/man/man8/grub-md5-crypt.8 #usr/share/man/man8/grub-terminfo.8 diff --git a/lfs/grub b/lfs/grub index 76315fa37e..8d58099759 100644 --- a/lfs/grub +++ b/lfs/grub @@ -75,18 +75,19 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) # Applying patches. - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-fedora-18.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-gentoo-14.patch cd $(DIR_APP) && autoreconf cd $(DIR_APP) && autoconf # Build. - cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr + cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr \ + --disable-auto-linux-mem-opt cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install # grub files mkdir -vp /boot/grub - cp -v /usr/share/grub/i386-pc/stage{1,2} /boot/grub + cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub for i in $(DIR_SRC)/config/grub/*; do \ [ -f $$i ] && cp -f $$i /boot/grub; \ done diff --git a/src/patches/grub-fedora-18.patch b/src/patches/grub-fedora-18.patch deleted file mode 100644 index e87c180daa..0000000000 --- a/src/patches/grub-fedora-18.patch +++ /dev/null @@ -1,48870 +0,0 @@ -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 - diff --git a/src/patches/grub-gentoo-14.patch b/src/patches/grub-gentoo-14.patch new file mode 100644 index 0000000000..d2bb95921c --- /dev/null +++ b/src/patches/grub-gentoo-14.patch @@ -0,0 +1,16087 @@ +diff -Nur grub-0.97/acinclude.m4 grub-0.97-patched/acinclude.m4 +--- grub-0.97/acinclude.m4 2004-04-27 22:48:06.000000000 +0200 ++++ grub-0.97-patched/acinclude.m4 2012-11-11 17:07:12.710729053 +0100 +@@ -57,7 +57,7 @@ + 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} ${LDFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then : + else + AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr]) + fi +diff -Nur grub-0.97/ChangeLog grub-0.97-patched/ChangeLog +--- grub-0.97/ChangeLog 2005-05-08 04:47:02.000000000 +0200 ++++ grub-0.97-patched/ChangeLog 2012-11-11 17:07:12.708728989 +0100 +@@ -1,3 +1,127 @@ ++2008-05-20 Robert Millan ++ ++ * netboot/cs89x0.c: Fix license violation. ++ * netboot/cs89x0.h: Likewise. ++ ++2008-04-10 Pavel Roskin ++ ++ * configure.ac: Always use "_cv_" in cache variables for ++ compatibility with Autoconf 2.62. ++ ++2008-03-28 Robert Millan ++ ++ Surpass 1 TiB disk addressing limit. Note: there are no plans to handle ++ the 2 TiB disk limit in GRUB Legacy, since that would need considerable ++ rework. If you have >2TiB disks, use GRUB 2 instead. ++ ++ * grub/asmstub.c (biosdisk): Add unsigned qualifier to `sector'. ++ * stage2/bios.c (biosdisk): Likewise. ++ * stage2/disk_io.c (rawread, devread, rawwrite, devwrite): Likewise. ++ * stage2/shared.h (rawread, devread, rawwrite, devwrite): Likewise. ++ * lib/device.c (get_drive_geometry): Replace BLKGETSIZE with ++ BLKGETSIZE64. ++ ++2007-10-29 Pavel Roskin ++ ++ * configure.ac: Test if '--build-id=none' is supported by the ++ linker and add it to LDFLAGS if possible. Build ID causes ++ objcopy to generate huge binary files. ++ * aclocal.m4 (grub_PROG_OBJCOPY_ABSOLUTE): Use LDFLAGS when ++ linking, so that build ID doesn't break the test. ++ * stage1/Makefile.am: Preserve LDFLAGS, use stage1_exec_LDFLAGS. ++ ++2007-02-22 Pavel Roskin ++ ++ * stage2/iso9660.h: Remove unnecessary packed attributes. ++ ++2007-02-22 Robert Millan ++ ++ * util/mkbimage: Update my email address, and remove my name from ++ some places where unnecessary credit is given. ++ ++2006-09-10 Pavel Roskin ++ ++ * netboot/natsemi.c: Fix compile error with gcc 4.1.1. Cast ++ cannot make a variable volatile - it should be declared as such. ++ * netboot/sis900.c: Likewise. ++ ++2006-09-08 Pavel Roskin ++ ++ * netboot/etherboot.h: Remove incorrect extern declarations of ++ the variables later declared static. Move BOOTP_DATA_ADDR ... ++ * netboot/main.c: ... here. Eliminate end_of_rfc1533 - it's ++ write-only. ++ ++2006-06-24 Yoshinori K. Okuji ++ ++ * docs/grub.texi: Changed the license term to the GNU Free ++ Documentation License 1.2. ++ ++ * docs/multiboot.texi: Reformatted to show the license term ++ and the version number explicitly. ++ ++ * docs/fdl.texi: New file. ++ ++ * docs/Makefile.am (grub_TEXINFOS): Added fdl.texi. ++ ++2006-06-24 Robert Millan ++ ++ * lib/device.c (write_to_partition): /dev/ataraid/ and /dev/rd/ ++ partitions have a "p" prefix. Add it. ++ ++2006-06-24 Robert Millan ++ ++ * lib/device.c (get_i2o_disk_name): New function. ++ (init_device_map) [__linux__]: Add support for I2O devices. ++ ++2006-05-02 Pavel Roskin ++ ++ * stage2/stage2.c (run_menu): Fix "savedefault" to save only top ++ level menu positions. Remember current position when calling a ++ submenu. Don't recalculate it when booting from a submenu. ++ ++ * grub/main.c (main): Make sure the boot drive number doesn't ++ exceed 255. ++ ++2006-05-02 Vesa Jaaskelainen ++ ++ * stage2/shared.h (vbe_mode): Back ported aligment fix from GRUB 2 ++ to GRUB Legacy. Problem reported by Gerardo Richarte. ++ ++2006-04-23 Robert Millan ++ ++ * grub/asmstub.c (get_diskinfo): Optimize sysctl routine. ++ ++2006-04-20 Robert Millan ++ ++ Fixes for kernel of FreeBSD: ++ * grub/asmstub.c (get_diskinfo): Toggle "kern.geom.debugflags" sysctl ++ before opening a device for writing. ++ * util/grub-install.in: Devices don't have this "r" prefix anymore. ++ ++2006-04-16 Yoshinori K. Okuji ++ ++ * docs/multiboot.texi: Correct the offset of address ++ fields. Reported by Jeroen Dekkers. ++ ++2006-03-21 Yoshinori K. Okuji ++ ++ * stage2/builtins.c (setup_func): Specify the size of DEVICE to ++ grub_strncat instead of a strange number 256. Reported by Vitaly ++ Fertman . ++ ++2005-09-29 Yoshinori K. Okuji ++ ++ * docs/multiboot.texi: Fix a bug in the byte order of ++ boot_device. I hope this won't affect any OS image. ++ Increased the version number to 0.6.94. ++ ++2005-09-28 Yoshinori K. Okuji ++ ++ * stage2/boot.c (load_image): Even if an OS image is an ELF ++ object, use the a.out kludge if MULTIBOOT_AOUT_KLUDGE is ++ specified. ++ + 2005-05-08 Yoshinori K. Okuji + + * configure.ac (AC_INIT): Upgraded to 0.97. +diff -Nur grub-0.97/configure.ac grub-0.97-patched/configure.ac +--- grub-0.97/configure.ac 2005-05-08 04:36:03.000000000 +0200 ++++ grub-0.97-patched/configure.ac 2012-11-11 17:07:12.752730394 +0100 +@@ -21,8 +21,12 @@ + AC_CANONICAL_HOST + + case "$host_cpu" in +-i[[3456]]86) host_cpu=i386 ;; +-x86_64) host_cpu=x86_64 ;; ++i[[3456]]86) ++ STAGE_MARCH="-march=$host_cpu" ++ host_cpu=i386 ;; ++x86_64) ++ STAGE_MARCH="-march=i686" ++ host_cpu=x86_64 ;; + *) AC_MSG_ERROR([unsupported CPU type]) ;; + esac + +@@ -56,12 +60,7 @@ + + AC_CHECK_TOOL(CC, gcc) + AC_PROG_CC +-# We need this for older versions of Autoconf. +-_AM_DEPENDENCIES(CC) +- +-dnl Because recent automake complains about AS, set it here. +-CCAS="$CC" +-AC_SUBST(CCAS) ++AM_PROG_AS + + AC_ARG_WITH(binutils, + [ --with-binutils=DIR search the directory DIR to find binutils]) +@@ -86,13 +85,13 @@ + fi + STAGE1_CFLAGS="-O2" + GRUB_CFLAGS="-O2" +- AC_CACHE_CHECK([whether optimization for size works], size_flag, [ ++ AC_CACHE_CHECK([whether optimization for size works], grub_cv_cc_Os, [ + saved_CFLAGS=$CFLAGS + CFLAGS="-Os -g" +- AC_TRY_COMPILE(, , size_flag=yes, size_flag=no) ++ AC_TRY_COMPILE(, , grub_cv_cc_Os=yes, grub_cv_cc_Os=no) + CFLAGS=$saved_CFLAGS + ]) +- if test "x$size_flag" = xyes; then ++ if test "x$grub_cv_cc_Os" = xyes; then + STAGE2_CFLAGS="-Os" + else + STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops" +@@ -100,21 +99,38 @@ + # OpenBSD has a GCC extension for protecting applications from + # stack smashing attacks, but GRUB doesn't want this feature. + AC_CACHE_CHECK([whether gcc has -fno-stack-protector], +- no_stack_protector_flag, [ ++ grub_cv_cc_no_stack_protector, [ + saved_CFLAGS=$CFLAGS + CFLAGS="-fno-stack-protector" + AC_TRY_COMPILE(, + , +- no_stack_protector_flag=yes, +- no_stack_protector_flag=no) ++ grub_cv_cc_no_stack_protector=yes, ++ grub_cv_cc_no_stack_protector=no) + CFLAGS=$saved_CFLAGS + ]) +- if test "x$no_stack_protector_flag" = xyes; then ++ if test "x$grub_cv_cc_no_stack_protector" = xyes; then + STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector" + fi ++ # Position Independent Executables, but GRUB doesn't want this feature. ++ AC_CACHE_CHECK([whether gcc has -fPIE on as default], grub_cv_cc_fpie, [ ++ AC_TRY_COMPILE(,[ ++ #if ! defined (__PIC__) || ! defined (__PIE__) ++ #error ++ #endif ++ ], ++ grub_cv_cc_fpie=yes, ++ grub_cv_cc_fpie=no) ++ ]) ++ if test "x$grub_cv_cc_fpie" = xyes; then ++ STAGE1_CFLAGS="$STAGE1_CFLAGS -nopie" ++ STAGE2_CFLAGS="$STAGE2_CFLAGS -nopie" ++ fi + fi + fi + ++STAGE1_CFLAGS="$STAGE1_CFLAGS -fno-strict-aliasing $STAGE_MARCH" ++STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-strict-aliasing $STAGE_MARCH" ++GRUB_CFLAGS="$GRUB_CFLAGS -fno-strict-aliasing" + AC_SUBST(STAGE1_CFLAGS) + AC_SUBST(STAGE2_CFLAGS) + AC_SUBST(GRUB_CFLAGS) +@@ -123,33 +139,44 @@ + CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow" + CPPFLAGS="$CPPFLAGS -Wpointer-arith" + +-AC_CACHE_CHECK([whether -Wundef works], undef_flag, [ ++AC_CACHE_CHECK([whether -Wundef works], grub_cv_cc_Wundef, [ + saved_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="-Wundef" +- AC_TRY_COMPILE(, , undef_flag=yes, undef_flag=no) ++ AC_TRY_COMPILE(, , grub_cv_cc_Wundef=yes, grub_cv_cc_Wundef=no) + CPPFLAGS="$saved_CPPFLAGS" + ]) + + # The options `-falign-*' are supported by gcc 3.0 or later. + # Probably it is sufficient to only check for -falign-loops. +-AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [ ++AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [ + saved_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="-falign-loops=1" +- AC_TRY_COMPILE(, , [falign_loop_flag=yes], [falign_loop_flag=no]) ++ AC_TRY_COMPILE(, , [grub_cv_cc_falign_loop=yes], [grub_cv_cc_falign_loop=no]) + CPPFLAGS="$saved_CPPFLAGS" + ]) + + # Force no alignment to save space. +-if test "x$falign_loop_flag" = xyes; then ++if test "x$grub_cv_cc_falign_loop" = 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 ++if test "x$grub_cv_cc_Wundef" = xyes; then + CPPFLAGS="$CPPFLAGS -Wundef" + fi + ++# Check if build ID can be disabled in the linker ++AC_MSG_CHECKING([whether linker accepts `--build-id=none']) ++save_LDFLAGS="$LDFLAGS" ++LDFLAGS="$LDFLAGS -Wl,--build-id=none" ++AC_TRY_LINK(, , build_id_flag=yes, build_id_flag=no) ++AC_MSG_RESULT([$build_id_flag]) ++LDFLAGS="$save_LDFLAGS" ++if test "x$build_id_flag" = xyes; then ++ LDFLAGS="$LDFLAGS -Wl,--build-id=none" ++fi ++ + if test "x$with_binutils" != x; then + dnl AC_PATH_TOOL(OBJCOPY, objcopy, , "$with_binutils:$PATH") + AC_PATH_PROG(OBJCOPY, objcopy, , "$with_binutils:$PATH") +@@ -595,6 +622,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 -Nur grub-0.97/docs/fdl.texi grub-0.97-patched/docs/fdl.texi +--- grub-0.97/docs/fdl.texi 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/docs/fdl.texi 2012-11-11 17:07:12.712729117 +0100 +@@ -0,0 +1,452 @@ ++ ++@node GNU Free Documentation License ++@appendixsec GNU Free Documentation License ++ ++@cindex FDL, GNU Free Documentation License ++@center Version 1.2, November 2002 ++ ++@display ++Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. ++51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ ++Everyone is permitted to copy and distribute verbatim copies ++of this license document, but changing it is not allowed. ++@end display ++ ++@enumerate 0 ++@item ++PREAMBLE ++ ++The purpose of this License is to make a manual, textbook, or other ++functional and useful document @dfn{free} in the sense of freedom: to ++assure everyone the effective freedom to copy and redistribute it, ++with or without modifying it, either commercially or noncommercially. ++Secondarily, this License preserves for the author and publisher a way ++to get credit for their work, while not being considered responsible ++for modifications made by others. ++ ++This License is a kind of ``copyleft'', which means that derivative ++works of the document must themselves be free in the same sense. It ++complements the GNU General Public License, which is a copyleft ++license designed for free software. ++ ++We have designed this License in order to use it for manuals for free ++software, because free software needs free documentation: a free ++program should come with manuals providing the same freedoms that the ++software does. But this License is not limited to software manuals; ++it can be used for any textual work, regardless of subject matter or ++whether it is published as a printed book. We recommend this License ++principally for works whose purpose is instruction or reference. ++ ++@item ++APPLICABILITY AND DEFINITIONS ++ ++This License applies to any manual or other work, in any medium, that ++contains a notice placed by the copyright holder saying it can be ++distributed under the terms of this License. Such a notice grants a ++world-wide, royalty-free license, unlimited in duration, to use that ++work under the conditions stated herein. The ``Document'', below, ++refers to any such manual or work. Any member of the public is a ++licensee, and is addressed as ``you''. You accept the license if you ++copy, modify or distribute the work in a way requiring permission ++under copyright law. ++ ++A ``Modified Version'' of the Document means any work containing the ++Document or a portion of it, either copied verbatim, or with ++modifications and/or translated into another language. ++ ++A ``Secondary Section'' is a named appendix or a front-matter section ++of the Document that deals exclusively with the relationship of the ++publishers or authors of the Document to the Document's overall ++subject (or to related matters) and contains nothing that could fall ++directly within that overall subject. (Thus, if the Document is in ++part a textbook of mathematics, a Secondary Section may not explain ++any mathematics.) The relationship could be a matter of historical ++connection with the subject or with related matters, or of legal, ++commercial, philosophical, ethical or political position regarding ++them. ++ ++The ``Invariant Sections'' are certain Secondary Sections whose titles ++are designated, as being those of Invariant Sections, in the notice ++that says that the Document is released under this License. If a ++section does not fit the above definition of Secondary then it is not ++allowed to be designated as Invariant. The Document may contain zero ++Invariant Sections. If the Document does not identify any Invariant ++Sections then there are none. ++ ++The ``Cover Texts'' are certain short passages of text that are listed, ++as Front-Cover Texts or Back-Cover Texts, in the notice that says that ++the Document is released under this License. A Front-Cover Text may ++be at most 5 words, and a Back-Cover Text may be at most 25 words. ++ ++A ``Transparent'' copy of the Document means a machine-readable copy, ++represented in a format whose specification is available to the ++general public, that is suitable for revising the document ++straightforwardly with generic text editors or (for images composed of ++pixels) generic paint programs or (for drawings) some widely available ++drawing editor, and that is suitable for input to text formatters or ++for automatic translation to a variety of formats suitable for input ++to text formatters. A copy made in an otherwise Transparent file ++format whose markup, or absence of markup, has been arranged to thwart ++or discourage subsequent modification by readers is not Transparent. ++An image format is not Transparent if used for any substantial amount ++of text. A copy that is not ``Transparent'' is called ``Opaque''. ++ ++Examples of suitable formats for Transparent copies include plain ++@sc{ascii} without markup, Texinfo input format, La@TeX{} input ++format, @acronym{SGML} or @acronym{XML} using a publicly available ++@acronym{DTD}, and standard-conforming simple @acronym{HTML}, ++PostScript or @acronym{PDF} designed for human modification. Examples ++of transparent image formats include @acronym{PNG}, @acronym{XCF} and ++@acronym{JPG}. Opaque formats include proprietary formats that can be ++read and edited only by proprietary word processors, @acronym{SGML} or ++@acronym{XML} for which the @acronym{DTD} and/or processing tools are ++not generally available, and the machine-generated @acronym{HTML}, ++PostScript or @acronym{PDF} produced by some word processors for ++output purposes only. ++ ++The ``Title Page'' means, for a printed book, the title page itself, ++plus such following pages as are needed to hold, legibly, the material ++this License requires to appear in the title page. For works in ++formats which do not have any title page as such, ``Title Page'' means ++the text near the most prominent appearance of the work's title, ++preceding the beginning of the body of the text. ++ ++A section ``Entitled XYZ'' means a named subunit of the Document whose ++title either is precisely XYZ or contains XYZ in parentheses following ++text that translates XYZ in another language. (Here XYZ stands for a ++specific section name mentioned below, such as ``Acknowledgements'', ++``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' ++of such a section when you modify the Document means that it remains a ++section ``Entitled XYZ'' according to this definition. ++ ++The Document may include Warranty Disclaimers next to the notice which ++states that this License applies to the Document. These Warranty ++Disclaimers are considered to be included by reference in this ++License, but only as regards disclaiming warranties: any other ++implication that these Warranty Disclaimers may have is void and has ++no effect on the meaning of this License. ++ ++@item ++VERBATIM COPYING ++ ++You may copy and distribute the Document in any medium, either ++commercially or noncommercially, provided that this License, the ++copyright notices, and the license notice saying this License applies ++to the Document are reproduced in all copies, and that you add no other ++conditions whatsoever to those of this License. You may not use ++technical measures to obstruct or control the reading or further ++copying of the copies you make or distribute. However, you may accept ++compensation in exchange for copies. If you distribute a large enough ++number of copies you must also follow the conditions in section 3. ++ ++You may also lend copies, under the same conditions stated above, and ++you may publicly display copies. ++ ++@item ++COPYING IN QUANTITY ++ ++If you publish printed copies (or copies in media that commonly have ++printed covers) of the Document, numbering more than 100, and the ++Document's license notice requires Cover Texts, you must enclose the ++copies in covers that carry, clearly and legibly, all these Cover ++Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on ++the back cover. Both covers must also clearly and legibly identify ++you as the publisher of these copies. The front cover must present ++the full title with all words of the title equally prominent and ++visible. You may add other material on the covers in addition. ++Copying with changes limited to the covers, as long as they preserve ++the title of the Document and satisfy these conditions, can be treated ++as verbatim copying in other respects. ++ ++If the required texts for either cover are too voluminous to fit ++legibly, you should put the first ones listed (as many as fit ++reasonably) on the actual cover, and continue the rest onto adjacent ++pages. ++ ++If you publish or distribute Opaque copies of the Document numbering ++more than 100, you must either include a machine-readable Transparent ++copy along with each Opaque copy, or state in or with each Opaque copy ++a computer-network location from which the general network-using ++public has access to download using public-standard network protocols ++a complete Transparent copy of the Document, free of added material. ++If you use the latter option, you must take reasonably prudent steps, ++when you begin distribution of Opaque copies in quantity, to ensure ++that this Transparent copy will remain thus accessible at the stated ++location until at least one year after the last time you distribute an ++Opaque copy (directly or through your agents or retailers) of that ++edition to the public. ++ ++It is requested, but not required, that you contact the authors of the ++Document well before redistributing any large number of copies, to give ++them a chance to provide you with an updated version of the Document. ++ ++@item ++MODIFICATIONS ++ ++You may copy and distribute a Modified Version of the Document under ++the conditions of sections 2 and 3 above, provided that you release ++the Modified Version under precisely this License, with the Modified ++Version filling the role of the Document, thus licensing distribution ++and modification of the Modified Version to whoever possesses a copy ++of it. In addition, you must do these things in the Modified Version: ++ ++@enumerate A ++@item ++Use in the Title Page (and on the covers, if any) a title distinct ++from that of the Document, and from those of previous versions ++(which should, if there were any, be listed in the History section ++of the Document). You may use the same title as a previous version ++if the original publisher of that version gives permission. ++ ++@item ++List on the Title Page, as authors, one or more persons or entities ++responsible for authorship of the modifications in the Modified ++Version, together with at least five of the principal authors of the ++Document (all of its principal authors, if it has fewer than five), ++unless they release you from this requirement. ++ ++@item ++State on the Title page the name of the publisher of the ++Modified Version, as the publisher. ++ ++@item ++Preserve all the copyright notices of the Document. ++ ++@item ++Add an appropriate copyright notice for your modifications ++adjacent to the other copyright notices. ++ ++@item ++Include, immediately after the copyright notices, a license notice ++giving the public permission to use the Modified Version under the ++terms of this License, in the form shown in the Addendum below. ++ ++@item ++Preserve in that license notice the full lists of Invariant Sections ++and required Cover Texts given in the Document's license notice. ++ ++@item ++Include an unaltered copy of this License. ++ ++@item ++Preserve the section Entitled ``History'', Preserve its Title, and add ++to it an item stating at least the title, year, new authors, and ++publisher of the Modified Version as given on the Title Page. If ++there is no section Entitled ``History'' in the Document, create one ++stating the title, year, authors, and publisher of the Document as ++given on its Title Page, then add an item describing the Modified ++Version as stated in the previous sentence. ++ ++@item ++Preserve the network location, if any, given in the Document for ++public access to a Transparent copy of the Document, and likewise ++the network locations given in the Document for previous versions ++it was based on. These may be placed in the ``History'' section. ++You may omit a network location for a work that was published at ++least four years before the Document itself, or if the original ++publisher of the version it refers to gives permission. ++ ++@item ++For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve ++the Title of the section, and preserve in the section all the ++substance and tone of each of the contributor acknowledgements and/or ++dedications given therein. ++ ++@item ++Preserve all the Invariant Sections of the Document, ++unaltered in their text and in their titles. Section numbers ++or the equivalent are not considered part of the section titles. ++ ++@item ++Delete any section Entitled ``Endorsements''. Such a section ++may not be included in the Modified Version. ++ ++@item ++Do not retitle any existing section to be Entitled ``Endorsements'' or ++to conflict in title with any Invariant Section. ++ ++@item ++Preserve any Warranty Disclaimers. ++@end enumerate ++ ++If the Modified Version includes new front-matter sections or ++appendices that qualify as Secondary Sections and contain no material ++copied from the Document, you may at your option designate some or all ++of these sections as invariant. To do this, add their titles to the ++list of Invariant Sections in the Modified Version's license notice. ++These titles must be distinct from any other section titles. ++ ++You may add a section Entitled ``Endorsements'', provided it contains ++nothing but endorsements of your Modified Version by various ++parties---for example, statements of peer review or that the text has ++been approved by an organization as the authoritative definition of a ++standard. ++ ++You may add a passage of up to five words as a Front-Cover Text, and a ++passage of up to 25 words as a Back-Cover Text, to the end of the list ++of Cover Texts in the Modified Version. Only one passage of ++Front-Cover Text and one of Back-Cover Text may be added by (or ++through arrangements made by) any one entity. If the Document already ++includes a cover text for the same cover, previously added by you or ++by arrangement made by the same entity you are acting on behalf of, ++you may not add another; but you may replace the old one, on explicit ++permission from the previous publisher that added the old one. ++ ++The author(s) and publisher(s) of the Document do not by this License ++give permission to use their names for publicity for or to assert or ++imply endorsement of any Modified Version. ++ ++@item ++COMBINING DOCUMENTS ++ ++You may combine the Document with other documents released under this ++License, under the terms defined in section 4 above for modified ++versions, provided that you include in the combination all of the ++Invariant Sections of all of the original documents, unmodified, and ++list them all as Invariant Sections of your combined work in its ++license notice, and that you preserve all their Warranty Disclaimers. ++ ++The combined work need only contain one copy of this License, and ++multiple identical Invariant Sections may be replaced with a single ++copy. If there are multiple Invariant Sections with the same name but ++different contents, make the title of each such section unique by ++adding at the end of it, in parentheses, the name of the original ++author or publisher of that section if known, or else a unique number. ++Make the same adjustment to the section titles in the list of ++Invariant Sections in the license notice of the combined work. ++ ++In the combination, you must combine any sections Entitled ``History'' ++in the various original documents, forming one section Entitled ++``History''; likewise combine any sections Entitled ``Acknowledgements'', ++and any sections Entitled ``Dedications''. You must delete all ++sections Entitled ``Endorsements.'' ++ ++@item ++COLLECTIONS OF DOCUMENTS ++ ++You may make a collection consisting of the Document and other documents ++released under this License, and replace the individual copies of this ++License in the various documents with a single copy that is included in ++the collection, provided that you follow the rules of this License for ++verbatim copying of each of the documents in all other respects. ++ ++You may extract a single document from such a collection, and distribute ++it individually under this License, provided you insert a copy of this ++License into the extracted document, and follow this License in all ++other respects regarding verbatim copying of that document. ++ ++@item ++AGGREGATION WITH INDEPENDENT WORKS ++ ++A compilation of the Document or its derivatives with other separate ++and independent documents or works, in or on a volume of a storage or ++distribution medium, is called an ``aggregate'' if the copyright ++resulting from the compilation is not used to limit the legal rights ++of the compilation's users beyond what the individual works permit. ++When the Document is included in an aggregate, this License does not ++apply to the other works in the aggregate which are not themselves ++derivative works of the Document. ++ ++If the Cover Text requirement of section 3 is applicable to these ++copies of the Document, then if the Document is less than one half of ++the entire aggregate, the Document's Cover Texts may be placed on ++covers that bracket the Document within the aggregate, or the ++electronic equivalent of covers if the Document is in electronic form. ++Otherwise they must appear on printed covers that bracket the whole ++aggregate. ++ ++@item ++TRANSLATION ++ ++Translation is considered a kind of modification, so you may ++distribute translations of the Document under the terms of section 4. ++Replacing Invariant Sections with translations requires special ++permission from their copyright holders, but you may include ++translations of some or all Invariant Sections in addition to the ++original versions of these Invariant Sections. You may include a ++translation of this License, and all the license notices in the ++Document, and any Warranty Disclaimers, provided that you also include ++the original English version of this License and the original versions ++of those notices and disclaimers. In case of a disagreement between ++the translation and the original version of this License or a notice ++or disclaimer, the original version will prevail. ++ ++If a section in the Document is Entitled ``Acknowledgements'', ++``Dedications'', or ``History'', the requirement (section 4) to Preserve ++its Title (section 1) will typically require changing the actual ++title. ++ ++@item ++TERMINATION ++ ++You may not copy, modify, sublicense, or distribute the Document except ++as expressly provided for under this License. Any other attempt to ++copy, modify, sublicense or distribute the Document is void, and will ++automatically terminate your rights under this License. However, ++parties who have received copies, or rights, from you under this ++License will not have their licenses terminated so long as such ++parties remain in full compliance. ++ ++@item ++FUTURE REVISIONS OF THIS LICENSE ++ ++The Free Software Foundation may publish new, revised versions ++of the GNU Free Documentation License from time to time. Such new ++versions will be similar in spirit to the present version, but may ++differ in detail to address new problems or concerns. See ++@uref{http://www.gnu.org/copyleft/}. ++ ++Each version of the License is given a distinguishing version number. ++If the Document specifies that a particular numbered version of this ++License ``or any later version'' applies to it, you have the option of ++following the terms and conditions either of that specified version or ++of any later version that has been published (not as a draft) by the ++Free Software Foundation. If the Document does not specify a version ++number of this License, you may choose any version ever published (not ++as a draft) by the Free Software Foundation. ++@end enumerate ++ ++@page ++@appendixsubsec ADDENDUM: How to use this License for your documents ++ ++To use this License in a document you have written, include a copy of ++the License in the document and put the following copyright and ++license notices just after the title page: ++ ++@smallexample ++@group ++ Copyright (C) @var{year} @var{your name}. ++ Permission is granted to copy, distribute and/or modify this document ++ under the terms of the GNU Free Documentation License, Version 1.2 ++ or any later version published by the Free Software Foundation; ++ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover ++ Texts. A copy of the license is included in the section entitled ``GNU ++ Free Documentation License''. ++@end group ++@end smallexample ++ ++If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, ++replace the ``with...Texts.'' line with this: ++ ++@smallexample ++@group ++ with the Invariant Sections being @var{list their titles}, with ++ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts ++ being @var{list}. ++@end group ++@end smallexample ++ ++If you have Invariant Sections without Cover Texts, or some other ++combination of the three, merge those two alternatives to suit the ++situation. ++ ++If your document contains nontrivial examples of program code, we ++recommend releasing these examples in parallel under your choice of ++free software license, such as the GNU General Public License, ++to permit their use in free software. ++ ++@c Local Variables: ++@c ispell-local-pdict: "ispell-dict" ++@c End: ++ +diff -Nur grub-0.97/docs/grub.8 grub-0.97-patched/docs/grub.8 +--- grub-0.97/docs/grub.8 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/grub.8 2012-11-11 17:07:12.715729211 +0100 +@@ -1,5 +1,5 @@ + .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH GRUB "8" "May 2005" "grub (GNU GRUB 0.97)" FSF ++.TH GRUB "8" "June 2006" "grub (GNU GRUB 0.97)" FSF + .SH NAME + grub \- the grub shell + .SH SYNOPSIS +diff -Nur grub-0.97/docs/grub.8.additions grub-0.97-patched/docs/grub.8.additions +--- grub-0.97/docs/grub.8.additions 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/docs/grub.8.additions 2012-11-11 17:07:12.702728798 +0100 +@@ -0,0 +1,3 @@ ++[SEE ALSO] ++.BR update-grub (8), ++.BR grub-install (8). +diff -Nur grub-0.97/docs/grub-install.8 grub-0.97-patched/docs/grub-install.8 +--- grub-0.97/docs/grub-install.8 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/grub-install.8 2012-11-11 17:07:12.713729149 +0100 +@@ -1,5 +1,5 @@ + .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH GRUB-INSTALL "8" "May 2005" "grub-install (GNU GRUB 0.97)" FSF ++.TH GRUB-INSTALL "8" "June 2006" "grub-install (GNU GRUB 0.97)" FSF + .SH NAME + grub-install \- install GRUB on your drive + .SH SYNOPSIS +diff -Nur grub-0.97/docs/grub-install.8.additions grub-0.97-patched/docs/grub-install.8.additions +--- grub-0.97/docs/grub-install.8.additions 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/docs/grub-install.8.additions 2012-11-11 17:07:12.703728829 +0100 +@@ -0,0 +1,3 @@ ++[SEE ALSO] ++.BR grub (8), ++.BR update-grub (8). +diff -Nur grub-0.97/docs/grub-md5-crypt.8 grub-0.97-patched/docs/grub-md5-crypt.8 +--- grub-0.97/docs/grub-md5-crypt.8 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/grub-md5-crypt.8 2012-11-11 17:07:12.713729149 +0100 +@@ -1,5 +1,5 @@ + .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH GRUB-MD5-CRYPT "8" "May 2005" "grub-md5-crypt (GNU GRUB )" FSF ++.TH GRUB-MD5-CRYPT "8" "June 2006" "grub-md5-crypt (GNU GRUB )" FSF + .SH NAME + grub-md5-crypt \- Encrypt a password in MD5 format + .SH SYNOPSIS +diff -Nur grub-0.97/docs/grub-terminfo.8 grub-0.97-patched/docs/grub-terminfo.8 +--- grub-0.97/docs/grub-terminfo.8 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/grub-terminfo.8 2012-11-11 17:07:12.714729180 +0100 +@@ -1,5 +1,5 @@ + .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH GRUB-TERMINFO "8" "May 2005" "grub-terminfo (GNU GRUB 0.97)" FSF ++.TH GRUB-TERMINFO "8" "June 2006" "grub-terminfo (GNU GRUB 0.97)" FSF + .SH NAME + grub-terminfo \- Generate a terminfo command from a terminfo name + .SH SYNOPSIS +diff -Nur grub-0.97/docs/grub.texi grub-0.97-patched/docs/grub.texi +--- grub-0.97/docs/grub.texi 2005-05-08 04:59:59.000000000 +0200 ++++ grub-0.97-patched/docs/grub.texi 2012-11-11 17:07:12.717729276 +0100 +@@ -2,22 +2,41 @@ + @c -*-texinfo-*- + @c %**start of header + @setfilename grub.info +-@settitle GRUB Manual +-@c %**end of header +- + @include version.texi +- ++@settitle GNU GRUB Manual @value{VERSION} + @c Unify all our little indices for now. + @syncodeindex fn cp + @syncodeindex vr cp + @syncodeindex ky cp + @syncodeindex pg cp + @syncodeindex tp cp ++@c %**end of header + + @footnotestyle separate + @paragraphindent 3 + @finalout + ++@copying ++This manual is for GNU GRUB (version @value{VERSION}, ++@value{UPDATED}). ++ ++Copyright @copyright{} 1999,2000,2001,2002,2004,2006 Free Software Foundation, Inc. ++ ++@quotation ++Permission is granted to copy, distribute and/or modify this document ++under the terms of the GNU Free Documentation License, Version 1.2 or ++any later version published by the Free Software Foundation; with no ++Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' ++and with the Back-Cover Texts as in (a) below. A copy of the ++license is included in the section entitled ``GNU Free Documentation ++License.'' ++ ++(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify ++this GNU Manual, like GNU software. Copies published by the Free ++Software Foundation raise funds for GNU development.'' ++@end quotation ++@end copying ++ + @dircategory Kernel + @direntry + * GRUB: (grub). The GRand Unified Bootloader +@@ -34,53 +53,16 @@ + + @setchapternewpage odd + +-@ifinfo +-Copyright @copyright{} 1999,2000,2001,2002,2004 Free Software Foundation, Inc. +- +-Permission is granted to make and distribute verbatim copies of +-this manual provided the copyright notice and this permission notice +-are preserved on all copies. +- +-@ignore +-Permission is granted to process this file through TeX and print the +-results, provided the printed document carries a copying permission +-notice identical to this one except for the removal of this paragraph +-(this paragraph not being relevant to the printed manual). +- +-@end ignore +- +-Permission is granted to copy and distribute modified versions of this +-manual under the conditions for verbatim copying, provided also that +-the entire resulting derived work is distributed under the terms of a +-permission notice identical to this one. +- +-Permission is granted to copy and distribute translations of this manual +-into another language, under the above conditions for modified versions. +-@end ifinfo +- + @titlepage + @sp 10 +-@title the GRUB manual ++@title the GNU GRUB manual + @subtitle The GRand Unified Bootloader, version @value{VERSION}, @value{UPDATED}. + @author Gordon Matzigkeit + @author Yoshinori K. Okuji + @c The following two commands start the copyright page. + @page + @vskip 0pt plus 1filll +-Copyright @copyright{} 1999,2000,2001,2002,2004 Free Software Foundation, Inc. +- +-Permission is granted to make and distribute verbatim copies of +-this manual provided the copyright notice and this permission notice +-are preserved on all copies. +-Permission is granted to copy and distribute modified versions of this +-manual under the conditions for verbatim copying, provided that the entire +-resulting derived work is distributed under the terms of a permission +-notice identical to this one. +- +-Permission is granted to copy and distribute translations of this manual +-into another language, under the above conditions for modified versions, +-except that this permission notice may be stated in a translation approved +-by Free Software Foundation. ++@insertcopying + @end titlepage + + @c Output the table of contents at the beginning. +@@ -91,12 +73,14 @@ + + @ifnottex + @node Top +-@top GRUB manual ++@top GNU GRUB manual + + This is the documentation of GNU GRUB, the GRand Unified Bootloader, + a flexible and powerful boot loader program for @sc{pc}s. + + This edition documents version @value{VERSION}. ++ ++@insertcopying + @end ifnottex + + @menu +@@ -124,6 +108,7 @@ + * Reporting bugs:: Where you should send a bug report + * Future:: Some future plans on GRUB + * Internals:: Hacking GRUB ++* Copying This Manual:: Copying This Manual + * Index:: + @end menu + +@@ -3965,6 +3950,16 @@ + @include internals.texi + + ++@node Copying This Manual ++@appendix Copying This Manual ++ ++@menu ++* GNU Free Documentation License:: License for copying this manual. ++@end menu ++ ++@include fdl.texi ++ ++ + @node Index + @unnumbered Index + +diff -Nur grub-0.97/docs/help2man grub-0.97-patched/docs/help2man +--- grub-0.97/docs/help2man 2003-07-09 13:45:36.000000000 +0200 ++++ grub-0.97-patched/docs/help2man 2012-11-11 17:07:12.701728766 +0100 +@@ -455,7 +455,9 @@ + $include{$sect} .= < + +-@dircategory Kernel +-@direntry +-* Multiboot Specification: (multiboot). Multiboot Specification. +-@end direntry ++Copyright @copyright{} 1995,96 Erich Stefan Boleyn + +-@ifinfo +-Copyright @copyright{} 1995, 96 Bryan Ford +-Copyright @copyright{} 1995, 96 Erich Stefan Boleyn +-Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ++Copyright @copyright{} 1999,2000,2001,2002,2005,2006 Free Software Foundation, Inc. + ++@quotation + Permission is granted to make and distribute verbatim copies of + this manual provided the copyright notice and this permission notice + are preserved on all copies. +@@ -36,7 +32,6 @@ + results, provided the printed document carries a copying permission + notice identical to this one except for the removal of this paragraph + (this paragraph not being relevant to the printed manual). +- + @end ignore + + Permission is granted to copy and distribute modified versions of this +@@ -45,31 +40,23 @@ + permission notice identical to this one. + + Permission is granted to copy and distribute translations of this manual +-into another language, under the above conditions for modified versions. +-@end ifinfo ++into another language, under the above conditions for modified ++versions. ++@end quotation ++@end copying ++ ++@dircategory Kernel ++@direntry ++* Multiboot Specification: (multiboot). Multiboot Specification. ++@end direntry + + @titlepage + @sp 10 +-@title The Multiboot Specification ++@title The Multiboot Specification version @value{VERSION} + @author Yoshinori K. Okuji, Bryan Ford, Erich Stefan Boleyn, Kunihiro Ishiguro + @page +- + @vskip 0pt plus 1filll +-Copyright @copyright{} 1995, 96 Bryan Ford +-Copyright @copyright{} 1995, 96 Erich Stefan Boleyn +-Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +- +-Permission is granted to make and distribute verbatim copies of +-this manual provided the copyright notice and this permission notice +-are preserved on all copies. +- +-Permission is granted to copy and distribute modified versions of this +-manual under the conditions for verbatim copying, provided also that +-the entire resulting derived work is distributed under the terms of a +-permission notice identical to this one. +- +-Permission is granted to copy and distribute translations of this manual +-into another language, under the above conditions for modified versions. ++@insertcopying + @end titlepage + + @finalout +@@ -80,7 +67,9 @@ + @top Multiboot Specification + + This file documents Multiboot Specification, the proposal for the boot +-sequence standard. This edition documents version 0.6.93. ++sequence standard. This edition documents version @value{VERSION}. ++ ++@insertcopying + @end ifnottex + + @menu +@@ -426,7 +415,7 @@ + kernel. + + If bit 16 in the @samp{flags} word is set, then the fields at offsets +-8-24 in the Multiboot header are valid, and the boot loader should use ++12-28 in the Multiboot header are valid, and the boot loader should use + them instead of the fields in the actual executable header to calculate + where to load the OS image. This information does not need to be + provided if the kernel image is in @sc{elf} format, but it @emph{must} +@@ -677,7 +666,7 @@ + @example + @group + +-------+-------+-------+-------+ +-| drive | part1 | part2 | part3 | ++| part3 | part2 | part1 | drive | + +-------+-------+-------+-------+ + @end group + @end example +@@ -1197,6 +1186,17 @@ + @item + The maintainer changes to the GNU GRUB maintainer team + @email{bug-grub@@gnu.org}, from Bryan Ford and Erich Stefan Boleyn. ++ ++@item ++The byte order of the @samp{boot_device} in Multiboot information is ++reversed. This was a mistake. ++ ++@item ++The offset of the address fields were wrong. ++ ++@item ++The format is adapted to a newer Texinfo, and the version number is ++specified more explicitly in the title. + @end itemize + + @item 0.6 +diff -Nur grub-0.97/grub/asmstub.c grub-0.97-patched/grub/asmstub.c +--- grub-0.97/grub/asmstub.c 2005-02-16 21:45:14.000000000 +0100 ++++ grub-0.97-patched/grub/asmstub.c 2012-11-11 17:07:12.719729342 +0100 +@@ -42,6 +42,7 @@ + #include + #include + #include ++#include + + #ifdef __linux__ + # include /* ioctl */ +@@ -55,6 +56,10 @@ + # endif /* ! BLKFLSBUF */ + #endif /* __linux__ */ + ++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) ++# include ++#endif ++ + /* We want to prevent any circularararity in our stubs, as well as + libc name clashes. */ + #define WITHOUT_LIBC_STUBS 1 +@@ -79,7 +84,7 @@ + struct apm_info apm_bios_info; + + /* Emulation requirements. */ +-char *grub_scratch_mem = 0; ++void *grub_scratch_mem = 0; + + struct geometry *disks = 0; + +@@ -103,14 +108,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; ++ ++#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"; ++ int 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, 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); +@@ -142,9 +195,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. */ + +@@ -217,7 +296,7 @@ + device_map = 0; + free (disks); + disks = 0; +- free (scratch); ++ munmap(simstack_alloc_base, simstack_size); + grub_scratch_mem = 0; + + if (serial_device) +@@ -777,7 +856,39 @@ + + /* Open read/write, or read-only if that failed. */ + if (! read_only) +- disks[drive].flags = open (devname, O_RDWR); ++ { ++/* By default, kernel of FreeBSD does not allow overwriting MBR */ ++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) ++#define GEOM_SYSCTL "kern.geom.debugflags" ++ int old_flags, flags; ++ size_t sizeof_int = sizeof (int); ++ ++ if (sysctlbyname (GEOM_SYSCTL, &old_flags, &sizeof_int, NULL, 0) != 0) ++ grub_printf ("failed to get " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); ++ ++ if ((old_flags & 0x10) == 0) ++ { ++ /* "allow foot shooting", see geom(4) */ ++ flags = old_flags | 0x10; ++ ++ if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &flags, sizeof (int)) != 0) ++ { ++ flags = old_flags; ++ grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); ++ } ++ } ++ else ++ flags = old_flags; ++#endif ++ disks[drive].flags = open (devname, O_RDWR); ++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) ++ if (flags != old_flags) ++ { ++ if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &old_flags, sizeof (int)) != 0) ++ grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); ++ } ++#endif ++ } + + if (disks[drive].flags == -1) + { +@@ -926,7 +1037,7 @@ + + int + biosdisk (int subfunc, int drive, struct geometry *geometry, +- int sector, int nsec, int segment) ++ unsigned int sector, int nsec, int segment) + { + char *buf; + int fd = geometry->flags; +diff -Nur grub-0.97/grub/asmstub.c.orig grub-0.97-patched/grub/asmstub.c.orig +--- grub-0.97/grub/asmstub.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/grub/asmstub.c.orig 2005-02-16 21:45:14.000000000 +0100 +@@ -0,0 +1,1275 @@ ++/* asmstub.c - a version of shared_src/asm.S that works under Unix */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,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. ++ */ ++ ++/* Try to use glibc's transparant LFS support. */ ++#define _LARGEFILE_SOURCE 1 ++/* lseek becomes synonymous with lseek64. */ ++#define _FILE_OFFSET_BITS 64 ++ ++/* Simulator entry point. */ ++int grub_stage2 (void); ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef __linux__ ++# include /* ioctl */ ++# if !defined(__GLIBC__) || \ ++ ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) ++/* Maybe libc doesn't have large file support. */ ++# include /* _llseek */ ++# endif /* (GLIBC < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR < 1)) */ ++# ifndef BLKFLSBUF ++# define BLKFLSBUF _IO (0x12,97) /* flush buffer cache */ ++# endif /* ! BLKFLSBUF */ ++#endif /* __linux__ */ ++ ++/* We want to prevent any circularararity in our stubs, as well as ++ libc name clashes. */ ++#define WITHOUT_LIBC_STUBS 1 ++#include ++#include ++#include ++#include ++ ++/* Simulated memory sizes. */ ++#define EXTENDED_MEMSIZE (3 * 1024 * 1024) /* 3MB */ ++#define CONVENTIONAL_MEMSIZE (640 * 1024) /* 640kB */ ++ ++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 */ ++unsigned long linux_text_len = 0; ++char *linux_data_tmp_addr = 0; ++char *linux_data_real_addr = 0; ++unsigned short io_map[IO_MAP_SIZE]; ++struct apm_info apm_bios_info; ++ ++/* Emulation requirements. */ ++char *grub_scratch_mem = 0; ++ ++struct geometry *disks = 0; ++ ++/* The map between BIOS drives and UNIX device file names. */ ++char **device_map = 0; ++ ++/* The jump buffer for exiting correctly. */ ++static jmp_buf env_for_exit; ++ ++/* The current color for console. */ ++int console_current_color = A_NORMAL; ++ ++/* The file descriptor for a serial device. */ ++static int serial_fd = -1; ++ ++/* The file name of a serial device. */ ++static char *serial_device = 0; ++ ++#ifdef SIMULATE_SLOWNESS_OF_SERIAL ++/* The speed of a serial device. */ ++static unsigned int serial_speed; ++#endif /* SIMULATE_SLOWNESS_OF_SERIAL */ ++ ++/* 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; ++ int i; ++ ++ auto void doit (void); ++ ++ /* We need a nested function so that we get a clean stack frame, ++ regardless of how the code is optimized. */ ++ void doit (void) ++ { ++ /* Make sure our stack lives in the simulated memory area. */ ++ asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n" ++ : "=&r" (realstack) : "r" (simstack)); ++ ++ /* Do a setjmp here for the stop command. */ ++ if (! setjmp (env_for_exit)) ++ { ++ /* Actually enter the generic stage2 code. */ ++ status = 0; ++ init_bios_info (); ++ } ++ else ++ { ++ /* If ERRNUM is non-zero, then set STATUS to non-zero. */ ++ if (errnum) ++ status = 1; ++ } ++ ++ /* Replace our stack before we use any local variables. */ ++ asm volatile ("movl %0, %%esp\n" : : "r" (realstack)); ++ } ++ ++ assert (grub_scratch_mem == 0); ++ scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15); ++ assert (scratch); ++ grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4); ++ ++ /* FIXME: simulate the memory holes using mprot, if available. */ ++ ++ assert (disks == 0); ++ disks = malloc (NUM_DISKS * sizeof (*disks)); ++ assert (disks); ++ /* Initialize DISKS. */ ++ for (i = 0; i < NUM_DISKS; i++) ++ disks[i].flags = -1; ++ ++ if (! init_device_map (&device_map, device_map_file, floppy_disks)) ++ return 1; ++ ++ /* Check some invariants. */ ++ assert ((SCRATCHSEG << 4) == SCRATCHADDR); ++ assert ((BUFFERSEG << 4) == BUFFERADDR); ++ assert (BUFFERADDR + BUFFERLEN == SCRATCHADDR); ++ assert (FSYS_BUF % 16 == 0); ++ assert (FSYS_BUF + FSYS_BUFLEN == BUFFERADDR); ++ ++#ifdef HAVE_LIBCURSES ++ /* Get into char-at-a-time mode. */ ++ if (use_curses) ++ { ++ initscr (); ++ cbreak (); ++ noecho (); ++ nonl (); ++ scrollok (stdscr, TRUE); ++ keypad (stdscr, TRUE); ++ wtimeout (stdscr, 100); ++ signal (SIGWINCH, SIG_IGN); ++ } ++#endif ++ ++ /* Make sure that actual writing is done. */ ++ sync (); ++ ++ /* Set our stack, and go for it. */ ++ simstack = (char *) PROTSTACKINIT; ++ doit (); ++ ++ /* I don't know if this is necessary really. */ ++ sync (); ++ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ endwin (); ++#endif ++ ++ /* Close off the file descriptors we used. */ ++ for (i = 0; i < NUM_DISKS; i ++) ++ if (disks[i].flags != -1) ++ { ++#ifdef __linux__ ++ /* In Linux, invalidate the buffer cache. In other OSes, reboot ++ is one of the solutions... */ ++ ioctl (disks[i].flags, BLKFLSBUF, 0); ++#else ++# warning "In your operating system, the buffer cache will not be flushed." ++#endif ++ close (disks[i].flags); ++ } ++ ++ if (serial_fd >= 0) ++ close (serial_fd); ++ ++ /* Release memory. */ ++ restore_device_map (device_map); ++ device_map = 0; ++ free (disks); ++ disks = 0; ++ free (scratch); ++ grub_scratch_mem = 0; ++ ++ if (serial_device) ++ free (serial_device); ++ serial_device = 0; ++ ++ /* Ahh... at last we're ready to return to caller. */ ++ return status; ++} ++ ++/* Assign DRIVE to a device name DEVICE. */ ++void ++assign_device_name (int drive, const char *device) ++{ ++ /* If DRIVE is already assigned, free it. */ ++ if (device_map[drive]) ++ free (device_map[drive]); ++ ++ /* If the old one is already opened, close it. */ ++ if (disks[drive].flags != -1) ++ { ++ close (disks[drive].flags); ++ disks[drive].flags = -1; ++ } ++ ++ /* Assign DRIVE to DEVICE. */ ++ if (! device) ++ device_map[drive] = 0; ++ else ++ device_map[drive] = strdup (device); ++} ++ ++void ++stop (void) ++{ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ endwin (); ++#endif ++ ++ /* Jump to doit. */ ++ longjmp (env_for_exit, 1); ++} ++ ++void ++grub_reboot (void) ++{ ++ stop (); ++} ++ ++void ++grub_halt (int no_apm) ++{ ++ stop (); ++} ++ ++/* calls for direct boot-loader chaining */ ++void ++chain_stage1 (unsigned long segment, unsigned long offset, ++ unsigned long part_table_addr) ++{ ++ stop (); ++} ++ ++ ++void ++chain_stage2 (unsigned long segment, unsigned long offset, int second_sector) ++{ ++ stop (); ++} ++ ++ ++/* do some funky stuff, then boot linux */ ++void ++linux_boot (void) ++{ ++ stop (); ++} ++ ++ ++/* For bzImage kernels. */ ++void ++big_linux_boot (void) ++{ ++ stop (); ++} ++ ++ ++/* 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) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* Set up the int15 handler. */ ++void ++set_int15_handler (void) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* Restore the original int15 handler. */ ++void ++unset_int15_handler (void) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* The key map. */ ++unsigned short bios_key_map[KEY_MAP_SIZE + 1]; ++unsigned short ascii_key_map[KEY_MAP_SIZE + 1]; ++ ++/* Copy MAP to the drive map and set up the int13 handler. */ ++void ++set_int13_handler (unsigned short *map) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++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); ++} ++ ++ ++#define MMAR_DESC_TYPE_AVAILABLE 1 /* available to OS */ ++#define MMAR_DESC_TYPE_RESERVED 2 /* not available */ ++#define MMAR_DESC_TYPE_ACPI_RECLAIM 3 /* usable by OS after reading ACPI */ ++#define MMAR_DESC_TYPE_ACPI_NVS 4 /* required to save between NVS sessions */ ++ ++#define MMAR_DESC_LENGTH 20 ++ ++/* 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) ++{ ++ /* Record the memory map statically. */ ++ static struct mmar_desc desc_table[] = ++ { ++ /* The conventional memory. */ ++ { ++ MMAR_DESC_LENGTH, ++ 0, ++ CONVENTIONAL_MEMSIZE, ++ MMAR_DESC_TYPE_AVAILABLE ++ }, ++ /* BIOS RAM and ROM (such as video memory). */ ++ { ++ MMAR_DESC_LENGTH, ++ CONVENTIONAL_MEMSIZE, ++ 0x100000 - CONVENTIONAL_MEMSIZE, ++ MMAR_DESC_TYPE_RESERVED ++ }, ++ /* The extended memory. */ ++ { ++ MMAR_DESC_LENGTH, ++ 0x100000, ++ EXTENDED_MEMSIZE, ++ MMAR_DESC_TYPE_AVAILABLE ++ } ++ }; ++ ++ int num = sizeof (desc_table) / sizeof (*desc_table); ++ ++ if (cont < 0 || cont >= num) ++ { ++ /* Should not happen. */ ++ desc->desc_len = 0; ++ } ++ else ++ { ++ /* Copy the entry. */ ++ *desc = desc_table[cont++]; ++ ++ /* If the next entry exists, return the index. */ ++ if (cont < num) ++ return cont; ++ } ++ ++ return 0; ++} ++ ++/* Track the int13 handler. */ ++void ++track_int13 (int drive) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* 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. */ ++} ++ ++/* Get VBE controller information. */ ++int ++get_vbe_controller_info (struct vbe_controller *controller) ++{ ++ /* Always fails. */ ++ return 0; ++} ++ ++/* Get VBE mode information. */ ++int ++get_vbe_mode_info (int mode_number, struct vbe_mode *mode) ++{ ++ /* Always fails. */ ++ return 0; ++} ++ ++/* Set VBE mode. */ ++int ++set_vbe_mode (int mode_number) ++{ ++ /* Always fails. */ ++ return 0; ++} ++ ++/* low-level timing info */ ++int ++getrtsecs (void) ++{ ++ /* FIXME: exact value is not important, so just return time_t for now. */ ++ return time (0); ++} ++ ++int ++currticks (void) ++{ ++ struct timeval tv; ++ long csecs; ++ int ticks_per_csec, ticks_per_usec; ++ ++ /* Note: 18.2 ticks/sec. */ ++ ++ /* Get current time. */ ++ gettimeofday (&tv, 0); ++ ++ /* Compute centiseconds. */ ++ csecs = tv.tv_sec / 10; ++ ++ /* Ticks per centisecond. */ ++ ticks_per_csec = csecs * 182; ++ ++ /* Ticks per microsecond. */ ++ ticks_per_usec = (((tv.tv_sec - csecs * 10) * 1000000 + tv.tv_usec) ++ * 182 / 10000000); ++ ++ /* Sum them. */ ++ return ticks_per_csec + ticks_per_usec; ++} ++ ++/* displays an ASCII character. IBM displays will translate some ++ characters to special graphical ones */ ++void ++console_putchar (int c) ++{ ++ /* Curses doesn't have VGA fonts. */ ++ switch (c) ++ { ++ case DISP_UL: ++ c = ACS_ULCORNER; ++ break; ++ case DISP_UR: ++ c = ACS_URCORNER; ++ break; ++ case DISP_LL: ++ c = ACS_LLCORNER; ++ break; ++ case DISP_LR: ++ c = ACS_LRCORNER; ++ break; ++ case DISP_HORIZ: ++ c = ACS_HLINE; ++ break; ++ case DISP_VERT: ++ c = ACS_VLINE; ++ break; ++ case DISP_LEFT: ++ c = ACS_LARROW; ++ break; ++ case DISP_RIGHT: ++ c = ACS_RARROW; ++ break; ++ case DISP_UP: ++ c = ACS_UARROW; ++ break; ++ case DISP_DOWN: ++ c = ACS_DARROW; ++ break; ++ default: ++ break; ++ } ++ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ { ++ /* In ncurses, a newline is treated badly, so we emulate it in our ++ own way. */ ++ if (c == '\n') ++ { ++ int x, y; ++ ++ getyx (stdscr, y, x); ++ if (y + 1 == LINES) ++ scroll (stdscr); ++ else ++ move (y + 1, x); ++ } ++ else if (isprint (c)) ++ { ++ int x, y; ++ ++ getyx (stdscr, y, x); ++ if (x + 1 == COLS) ++ { ++ console_putchar ('\r'); ++ console_putchar ('\n'); ++ } ++ addch (c | console_current_color); ++ } ++ else ++ { ++ addch (c); ++ } ++ ++#ifdef REFRESH_IMMEDIATELY ++ refresh (); ++#endif ++ } ++ else ++#endif ++ { ++ /* CR is not used in Unix. */ ++ if (c != '\r') ++ putchar (c); ++ } ++} ++ ++/* The store for ungetch simulation. This is necessary, because ++ ncurses-1.9.9g is still used in the world and its ungetch is ++ completely broken. */ ++#ifdef HAVE_LIBCURSES ++static int save_char = ERR; ++#endif ++ ++static int ++console_translate_key (int c) ++{ ++ switch (c) ++ { ++ case KEY_LEFT: ++ return 2; ++ case KEY_RIGHT: ++ return 6; ++ case KEY_UP: ++ return 16; ++ case KEY_DOWN: ++ return 14; ++ case KEY_DC: ++ return 4; ++ case KEY_BACKSPACE: ++ return 8; ++ case KEY_HOME: ++ return 1; ++ case KEY_END: ++ return 5; ++ case KEY_PPAGE: ++ return 7; ++ case KEY_NPAGE: ++ return 3; ++ default: ++ break; ++ } ++ ++ return c; ++} ++ ++/* like 'getkey', but doesn't wait, returns -1 if nothing available */ ++int ++console_checkkey (void) ++{ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ { ++ int c; ++ ++ /* Check for SAVE_CHAR. This should not be true, because this ++ means checkkey is called twice continuously. */ ++ if (save_char != ERR) ++ return save_char; ++ ++ c = getch (); ++ /* If C is not ERR, then put it back in the input queue. */ ++ if (c != ERR) ++ save_char = c; ++ return console_translate_key (c); ++ } ++#endif ++ ++ /* Just pretend they hit the space bar, then read the real key when ++ they call getkey. */ ++ return ' '; ++} ++ ++/* returns packed BIOS/ASCII code */ ++int ++console_getkey (void) ++{ ++ int c; ++ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ { ++ /* If checkkey has already got a character, then return it. */ ++ if (save_char != ERR) ++ { ++ c = save_char; ++ save_char = ERR; ++ return console_translate_key (c); ++ } ++ ++ wtimeout (stdscr, -1); ++ c = getch (); ++ wtimeout (stdscr, 100); ++ } ++ else ++#endif ++ c = getchar (); ++ ++ /* Quit if we get EOF. */ ++ if (c == -1) ++ stop (); ++ ++ return console_translate_key (c); ++} ++ ++/* returns packed values, LSB+1 is x, LSB is y */ ++int ++console_getxy (void) ++{ ++ int y, x; ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ getyx (stdscr, y, x); ++ else ++#endif ++ y = x = 0; ++ return (x << 8) | (y & 0xff); ++} ++ ++void ++console_gotoxy (int x, int y) ++{ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ move (y, x); ++#endif ++} ++ ++/* low-level character I/O */ ++void ++console_cls (void) ++{ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ clear (); ++#endif ++} ++ ++void ++console_setcolorstate (color_state state) ++{ ++ console_current_color = ++ (state == COLOR_STATE_HIGHLIGHT) ? A_REVERSE : A_NORMAL; ++} ++ ++void ++console_setcolor (int normal_color, int highlight_color) ++{ ++ /* Nothing to do. */ ++} ++ ++int ++console_setcursor (int on) ++{ ++ return 1; ++} ++ ++/* 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) ++{ ++ /* FIXME: this function is truly horrid. We try opening the device, ++ then severely abuse the GEOMETRY->flags field to pass a file ++ descriptor to biosdisk. Thank God nobody's looking at this comment, ++ or my reputation would be ruined. --Gord */ ++ ++ /* See if we have a cached device. */ ++ if (disks[drive].flags == -1) ++ { ++ /* The unpartitioned device name: /dev/XdX */ ++ char *devname = device_map[drive]; ++ char buf[512]; ++ ++ if (! devname) ++ return -1; ++ ++ if (verbose) ++ grub_printf ("Attempt to open drive 0x%x (%s)\n", ++ drive, devname); ++ ++ /* Open read/write, or read-only if that failed. */ ++ if (! read_only) ++ disks[drive].flags = open (devname, O_RDWR); ++ ++ if (disks[drive].flags == -1) ++ { ++ if (read_only || errno == EACCES || errno == EROFS || errno == EPERM) ++ { ++ disks[drive].flags = open (devname, O_RDONLY); ++ if (disks[drive].flags == -1) ++ { ++ assign_device_name (drive, 0); ++ return -1; ++ } ++ } ++ else ++ { ++ assign_device_name (drive, 0); ++ return -1; ++ } ++ } ++ ++ /* Attempt to read the first sector. */ ++ if (read (disks[drive].flags, buf, 512) != 512) ++ { ++ close (disks[drive].flags); ++ disks[drive].flags = -1; ++ assign_device_name (drive, 0); ++ return -1; ++ } ++ ++ if (disks[drive].flags != -1) ++ get_drive_geometry (&disks[drive], device_map, drive); ++ } ++ ++ if (disks[drive].flags == -1) ++ return -1; ++ ++#ifdef __linux__ ++ /* In Linux, invalidate the buffer cache, so that left overs ++ from other program in the cache are flushed and seen by us */ ++ ioctl (disks[drive].flags, BLKFLSBUF, 0); ++#endif ++ ++ *geometry = disks[drive]; ++ return 0; ++} ++ ++/* Read LEN bytes from FD in BUF. Return less than or equal to zero if an ++ error occurs, otherwise return LEN. */ ++static int ++nread (int fd, char *buf, size_t len) ++{ ++ int size = len; ++ ++ while (len) ++ { ++ int ret = read (fd, buf, len); ++ ++ if (ret <= 0) ++ { ++ if (errno == EINTR) ++ continue; ++ else ++ return ret; ++ } ++ ++ len -= ret; ++ buf += ret; ++ } ++ ++ return size; ++} ++ ++/* Write LEN bytes from BUF to FD. Return less than or equal to zero if an ++ error occurs, otherwise return LEN. */ ++static int ++nwrite (int fd, char *buf, size_t len) ++{ ++ int size = len; ++ ++ while (len) ++ { ++ int ret = write (fd, buf, len); ++ ++ if (ret <= 0) ++ { ++ if (errno == EINTR) ++ continue; ++ else ++ return ret; ++ } ++ ++ len -= ret; ++ buf += ret; ++ } ++ ++ return size; ++} ++ ++/* Dump BUF in the format of hexadecimal numbers. */ ++static void ++hex_dump (void *buf, size_t size) ++{ ++ /* FIXME: How to determine which length is readable? */ ++#define MAX_COLUMN 70 ++ ++ /* use unsigned char for numerical computations */ ++ unsigned char *ptr = buf; ++ /* count the width of the line */ ++ int column = 0; ++ /* how many bytes written */ ++ int count = 0; ++ ++ while (size > 0) ++ { ++ /* high 4 bits */ ++ int hi = *ptr >> 4; ++ /* low 4 bits */ ++ int low = *ptr & 0xf; ++ ++ /* grub_printf does not handle prefix number, such as %2x, so ++ format the number by hand... */ ++ grub_printf ("%x%x", hi, low); ++ column += 2; ++ count++; ++ ptr++; ++ size--; ++ ++ /* Insert space or newline with the interval 4 bytes. */ ++ if (size != 0 && (count % 4) == 0) ++ { ++ if (column < MAX_COLUMN) ++ { ++ grub_printf (" "); ++ column++; ++ } ++ else ++ { ++ grub_printf ("\n"); ++ column = 0; ++ } ++ } ++ } ++ ++ /* Add a newline at the end for readability. */ ++ grub_printf ("\n"); ++} ++ ++int ++biosdisk (int subfunc, int drive, struct geometry *geometry, ++ int sector, int nsec, int segment) ++{ ++ char *buf; ++ int fd = geometry->flags; ++ ++ /* Get the file pointer from the geometry, and make sure it matches. */ ++ if (fd == -1 || fd != disks[drive].flags) ++ return BIOSDISK_ERROR_GEOMETRY; ++ ++ /* Seek to the specified location. */ ++#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)) ++ return -1; ++ } ++#else ++ { ++ off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; ++ ++ if (lseek (fd, offset, SEEK_SET) != offset) ++ return -1; ++ } ++#endif ++ ++ buf = (char *) (segment << 4); ++ ++ switch (subfunc) ++ { ++ case BIOSDISK_READ: ++#ifdef __linux__ ++ if (sector == 0 && nsec > 1) ++ { ++ /* Work around a bug in linux's ez remapping. Linux remaps all ++ 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) ++ return -1; ++ buf += SECTOR_SIZE; ++ nsec--; ++ } ++#endif ++ if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) ++ return -1; ++ break; ++ ++ case BIOSDISK_WRITE: ++ if (verbose) ++ { ++ 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); ++ } ++ if (! read_only) ++ if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) ++ return -1; ++ break; ++ ++ default: ++ grub_printf ("unknown subfunc %d\n", subfunc); ++ break; ++ } ++ ++ return 0; ++} ++ ++ ++void ++stop_floppy (void) ++{ ++ /* NOTUSED */ ++} ++ ++/* Fetch a key from a serial device. */ ++int ++serial_hw_fetch (void) ++{ ++ fd_set fds; ++ struct timeval to; ++ char c; ++ ++ /* Wait only for the serial device. */ ++ FD_ZERO (&fds); ++ FD_SET (serial_fd, &fds); ++ ++ to.tv_sec = 0; ++ to.tv_usec = 0; ++ ++ if (select (serial_fd + 1, &fds, 0, 0, &to) > 0) ++ { ++ if (nread (serial_fd, &c, 1) != 1) ++ stop (); ++ ++ return c; ++ } ++ ++ return -1; ++} ++ ++/* Put a character to a serial device. */ ++void ++serial_hw_put (int c) ++{ ++ char ch = (char) c; ++ ++ if (nwrite (serial_fd, &ch, 1) != 1) ++ stop (); ++} ++ ++void ++serial_hw_delay (void) ++{ ++#ifdef SIMULATE_SLOWNESS_OF_SERIAL ++ struct timeval otv, tv; ++ ++ gettimeofday (&otv, 0); ++ ++ while (1) ++ { ++ long delta; ++ ++ gettimeofday (&tv, 0); ++ delta = tv.tv_usec - otv.tv_usec; ++ if (delta < 0) ++ delta += 1000000; ++ ++ if (delta >= 1000000 / (serial_speed >> 3)) ++ break; ++ } ++#endif /* SIMULATE_SLOWNESS_OF_SERIAL */ ++} ++ ++static speed_t ++get_termios_speed (int speed) ++{ ++ switch (speed) ++ { ++ case 2400: return B2400; ++ case 4800: return B4800; ++ case 9600: return B9600; ++ case 19200: return B19200; ++ case 38400: return B38400; ++#ifdef B57600 ++ case 57600: return B57600; ++#endif ++#ifdef B115200 ++ case 115200: return B115200; ++#endif ++ } ++ ++ return B0; ++} ++ ++/* Get the port number of the unit UNIT. In the grub shell, this doesn't ++ make sense. */ ++unsigned short ++serial_hw_get_port (int unit) ++{ ++ return 0; ++} ++ ++/* Initialize a serial device. In the grub shell, PORT is unused. */ ++int ++serial_hw_init (unsigned short port, unsigned int speed, ++ int word_len, int parity, int stop_bit_len) ++{ ++ struct termios termios; ++ speed_t termios_speed; ++ int i; ++ ++ /* Check if the file name is specified. */ ++ if (! serial_device) ++ return 0; ++ ++ /* If a serial device is already opened, close it first. */ ++ if (serial_fd >= 0) ++ close (serial_fd); ++ ++ /* Open the device file. */ ++ serial_fd = open (serial_device, ++ O_RDWR | O_NOCTTY ++#if defined(O_SYNC) ++ /* O_SYNC is used in Linux (and some others?). */ ++ | O_SYNC ++#elif defined(O_FSYNC) ++ /* O_FSYNC is used in FreeBSD. */ ++ | O_FSYNC ++#endif ++ ); ++ if (serial_fd < 0) ++ return 0; ++ ++ /* Get the termios parameters. */ ++ if (tcgetattr (serial_fd, &termios)) ++ goto fail; ++ ++ /* Raw mode. */ ++ cfmakeraw (&termios); ++ ++ /* Set the speed. */ ++ termios_speed = get_termios_speed (speed); ++ if (termios_speed == B0) ++ goto fail; ++ ++ cfsetispeed (&termios, termios_speed); ++ cfsetospeed (&termios, termios_speed); ++ ++ /* Set the word length. */ ++ termios.c_cflag &= ~CSIZE; ++ switch (word_len) ++ { ++ case UART_5BITS_WORD: ++ termios.c_cflag |= CS5; ++ break; ++ case UART_6BITS_WORD: ++ termios.c_cflag |= CS6; ++ break; ++ case UART_7BITS_WORD: ++ termios.c_cflag |= CS7; ++ break; ++ case UART_8BITS_WORD: ++ termios.c_cflag |= CS8; ++ break; ++ default: ++ goto fail; ++ } ++ ++ /* Set the parity. */ ++ switch (parity) ++ { ++ case UART_NO_PARITY: ++ termios.c_cflag &= ~PARENB; ++ break; ++ case UART_ODD_PARITY: ++ termios.c_cflag |= PARENB; ++ termios.c_cflag |= PARODD; ++ break; ++ case UART_EVEN_PARITY: ++ termios.c_cflag |= PARENB; ++ termios.c_cflag &= ~PARODD; ++ break; ++ default: ++ goto fail; ++ } ++ ++ /* Set the length of stop bit. */ ++ switch (stop_bit_len) ++ { ++ case UART_1_STOP_BIT: ++ termios.c_cflag &= ~CSTOPB; ++ break; ++ case UART_2_STOP_BITS: ++ termios.c_cflag |= CSTOPB; ++ break; ++ default: ++ goto fail; ++ } ++ ++ /* Set the parameters. */ ++ if (tcsetattr (serial_fd, TCSANOW, &termios)) ++ goto fail; ++ ++#ifdef SIMULATE_SLOWNESS_OF_SERIAL ++ serial_speed = speed; ++#endif /* SIMUATE_SLOWNESS_OF_SERIAL */ ++ ++ /* Get rid of the flag TERM_NEED_INIT from the serial terminal. */ ++ for (i = 0; term_table[i].name; i++) ++ { ++ if (strcmp (term_table[i].name, "serial") == 0) ++ { ++ term_table[i].flags &= ~(TERM_NEED_INIT); ++ break; ++ } ++ } ++ ++ return 1; ++ ++ fail: ++ close (serial_fd); ++ serial_fd = -1; ++ return 0; ++} ++ ++/* Set the file name of a serial device (or a pty device). This is a ++ function specific to the grub shell. */ ++void ++serial_set_device (const char *device) ++{ ++ if (serial_device) ++ free (serial_device); ++ ++ serial_device = strdup (device); ++} ++ ++/* There is no difference between console and hercules in the grub shell. */ ++void ++hercules_putchar (int c) ++{ ++ console_putchar (c); ++} ++ ++int ++hercules_getxy (void) ++{ ++ return console_getxy (); ++} ++ ++void ++hercules_gotoxy (int x, int y) ++{ ++ console_gotoxy (x, y); ++} ++ ++void ++hercules_cls (void) ++{ ++ console_cls (); ++} ++ ++void ++hercules_setcolorstate (color_state state) ++{ ++ console_setcolorstate (state); ++} ++ ++void ++hercules_setcolor (int normal_color, int highlight_color) ++{ ++ console_setcolor (normal_color, highlight_color); ++} ++ ++int ++hercules_setcursor (int on) ++{ ++ return 1; ++} +diff -Nur grub-0.97/grub/main.c grub-0.97-patched/grub/main.c +--- grub-0.97/grub/main.c 2003-07-09 13:45:36.000000000 +0200 ++++ grub-0.97-patched/grub/main.c 2012-11-11 17:07:12.720729374 +0100 +@@ -32,6 +32,7 @@ + #define WITHOUT_LIBC_STUBS 1 + #include + #include ++#include + + char *program_name = 0; + int use_config_file = 1; +@@ -140,10 +141,7 @@ + program_name = argv[0]; + default_boot_drive = boot_drive; + default_install_partition = install_partition; +- if (config_file) +- default_config_file = config_file; +- else +- default_config_file = "NONE"; ++ default_config_file = config_file; + + /* Parse command-line options. */ + do +@@ -192,6 +190,12 @@ + perror ("strtoul"); + exit (1); + } ++ if (boot_drive >= NUM_DISKS) ++ { ++ fprintf (stderr, "boot_drive should be from 0 to %d\n", ++ NUM_DISKS - 1); ++ exit (1); ++ } + break; + + case OPT_NO_CONFIG_FILE: +diff -Nur grub-0.97/grub/main.c.orig grub-0.97-patched/grub/main.c.orig +--- grub-0.97/grub/main.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/grub/main.c.orig 2003-07-09 13:45:36.000000000 +0200 +@@ -0,0 +1,265 @@ ++/* main.c - experimental GRUB stage2 that runs under Unix */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,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. ++ */ ++ ++/* Simulator entry point. */ ++int grub_stage2 (void); ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define WITHOUT_LIBC_STUBS 1 ++#include ++#include ++ ++char *program_name = 0; ++int use_config_file = 1; ++int use_preset_menu = 0; ++#ifdef HAVE_LIBCURSES ++int use_curses = 1; ++#else ++int use_curses = 0; ++#endif ++int verbose = 0; ++int read_only = 0; ++int floppy_disks = 1; ++char *device_map_file = 0; ++static int default_boot_drive; ++static int default_install_partition; ++static char *default_config_file; ++ ++#define OPT_HELP -2 ++#define OPT_VERSION -3 ++#define OPT_HOLD -4 ++#define OPT_CONFIG_FILE -5 ++#define OPT_INSTALL_PARTITION -6 ++#define OPT_BOOT_DRIVE -7 ++#define OPT_NO_CONFIG_FILE -8 ++#define OPT_NO_CURSES -9 ++#define OPT_BATCH -10 ++#define OPT_VERBOSE -11 ++#define OPT_READ_ONLY -12 ++#define OPT_PROBE_SECOND_FLOPPY -13 ++#define OPT_NO_FLOPPY -14 ++#define OPT_DEVICE_MAP -15 ++#define OPT_PRESET_MENU -16 ++#define OPT_NO_PAGER -17 ++#define OPTSTRING "" ++ ++static struct option longopts[] = ++{ ++ {"batch", no_argument, 0, OPT_BATCH}, ++ {"boot-drive", required_argument, 0, OPT_BOOT_DRIVE}, ++ {"config-file", required_argument, 0, OPT_CONFIG_FILE}, ++ {"device-map", required_argument, 0, OPT_DEVICE_MAP}, ++ {"help", no_argument, 0, OPT_HELP}, ++ {"hold", optional_argument, 0, OPT_HOLD}, ++ {"install-partition", required_argument, 0, OPT_INSTALL_PARTITION}, ++ {"no-config-file", no_argument, 0, OPT_NO_CONFIG_FILE}, ++ {"no-curses", no_argument, 0, OPT_NO_CURSES}, ++ {"no-floppy", no_argument, 0, OPT_NO_FLOPPY}, ++ {"no-pager", no_argument, 0, OPT_NO_PAGER}, ++ {"preset-menu", no_argument, 0, OPT_PRESET_MENU}, ++ {"probe-second-floppy", no_argument, 0, OPT_PROBE_SECOND_FLOPPY}, ++ {"read-only", no_argument, 0, OPT_READ_ONLY}, ++ {"verbose", no_argument, 0, OPT_VERBOSE}, ++ {"version", no_argument, 0, OPT_VERSION}, ++ {0}, ++}; ++ ++ ++static void ++usage (int status) ++{ ++ if (status) ++ fprintf (stderr, "Try ``grub --help'' for more information.\n"); ++ else ++ printf ("\ ++Usage: grub [OPTION]...\n\ ++\n\ ++Enter the GRand Unified Bootloader command shell.\n\ ++\n\ ++ --batch turn on batch mode for non-interactive use\n\ ++ --boot-drive=DRIVE specify stage2 boot_drive [default=0x%x]\n\ ++ --config-file=FILE specify stage2 config_file [default=%s]\n\ ++ --device-map=FILE use the device map file FILE\n\ ++ --help display this message and exit\n\ ++ --hold wait until a debugger will attach\n\ ++ --install-partition=PAR specify stage2 install_partition [default=0x%x]\n\ ++ --no-config-file do not use the config file\n\ ++ --no-curses do not use curses\n\ ++ --no-floppy do not probe any floppy drive\n\ ++ --no-pager do not use internal pager\n\ ++ --preset-menu use the preset menu\n\ ++ --probe-second-floppy probe the second floppy drive\n\ ++ --read-only do not write anything to devices\n\ ++ --verbose print verbose messages\n\ ++ --version print version information and exit\n\ ++\n\ ++Report bugs to .\n\ ++", ++ default_boot_drive, default_config_file, ++ default_install_partition); ++ ++ exit (status); ++} ++ ++ ++int ++main (int argc, char **argv) ++{ ++ int c; ++ int hold = 0; ++ ++ /* First of all, call sync so that all in-core data is scheduled to be ++ actually written to disks. This is very important because GRUB does ++ not use ordinary stdio interface but raw devices. */ ++ sync (); ++ ++ program_name = argv[0]; ++ default_boot_drive = boot_drive; ++ default_install_partition = install_partition; ++ if (config_file) ++ default_config_file = config_file; ++ else ++ default_config_file = "NONE"; ++ ++ /* Parse command-line options. */ ++ do ++ { ++ c = getopt_long (argc, argv, OPTSTRING, longopts, 0); ++ switch (c) ++ { ++ case EOF: ++ /* Fall through the bottom of the loop. */ ++ break; ++ ++ case OPT_HELP: ++ usage (0); ++ break; ++ ++ case OPT_VERSION: ++ printf ("grub (GNU GRUB " VERSION ")\n"); ++ exit (0); ++ break; ++ ++ case OPT_HOLD: ++ if (! optarg) ++ hold = -1; ++ else ++ hold = atoi (optarg); ++ break; ++ ++ case OPT_CONFIG_FILE: ++ strncpy (config_file, optarg, 127); /* FIXME: arbitrary */ ++ config_file[127] = '\0'; ++ break; ++ ++ case OPT_INSTALL_PARTITION: ++ install_partition = strtoul (optarg, 0, 0); ++ if (install_partition == ULONG_MAX) ++ { ++ perror ("strtoul"); ++ exit (1); ++ } ++ break; ++ ++ case OPT_BOOT_DRIVE: ++ boot_drive = strtoul (optarg, 0, 0); ++ if (boot_drive == ULONG_MAX) ++ { ++ perror ("strtoul"); ++ exit (1); ++ } ++ break; ++ ++ case OPT_NO_CONFIG_FILE: ++ use_config_file = 0; ++ break; ++ ++ case OPT_NO_CURSES: ++ use_curses = 0; ++ break; ++ ++ case OPT_NO_PAGER: ++ use_pager = 0; ++ break; ++ ++ case OPT_BATCH: ++ /* This is the same as "--no-config-file --no-curses --no-pager". */ ++ use_config_file = 0; ++ use_curses = 0; ++ use_pager = 0; ++ break; ++ ++ case OPT_READ_ONLY: ++ read_only = 1; ++ break; ++ ++ case OPT_VERBOSE: ++ verbose = 1; ++ break; ++ ++ case OPT_NO_FLOPPY: ++ floppy_disks = 0; ++ break; ++ ++ case OPT_PROBE_SECOND_FLOPPY: ++ floppy_disks = 2; ++ break; ++ ++ case OPT_DEVICE_MAP: ++ device_map_file = strdup (optarg); ++ break; ++ ++ case OPT_PRESET_MENU: ++ use_preset_menu = 1; ++ break; ++ ++ default: ++ usage (1); ++ } ++ } ++ while (c != EOF); ++ ++ /* Wait until the HOLD variable is cleared by an attached debugger. */ ++ if (hold && verbose) ++ printf ("Run \"gdb %s %d\", and set HOLD to zero.\n", ++ program_name, (int) getpid ()); ++ while (hold) ++ { ++ if (hold > 0) ++ hold--; ++ ++ sleep (1); ++ } ++ ++ /* If we don't have curses (!HAVE_LIBCURSES or --no-curses or ++ --batch) put terminal to dumb for better handling of line i/o */ ++ if (! use_curses) ++ current_term->flags = TERM_NO_EDIT | TERM_DUMB; ++ ++ /* Transfer control to the stage2 simulator. */ ++ exit (grub_stage2 ()); ++} +diff -Nur grub-0.97/lib/device.c grub-0.97-patched/lib/device.c +--- grub-0.97/lib/device.c 2005-03-28 01:14:25.000000000 +0200 ++++ grub-0.97-patched/lib/device.c 2012-11-11 17:07:12.748730268 +0100 +@@ -69,9 +69,9 @@ + # ifndef CDROM_GET_CAPABILITY + # define CDROM_GET_CAPABILITY 0x5331 /* get capabilities */ + # endif /* ! CDROM_GET_CAPABILITY */ +-# ifndef BLKGETSIZE +-# define BLKGETSIZE _IO(0x12,96) /* return device size */ +-# endif /* ! BLKGETSIZE */ ++# ifndef BLKGETSIZE64 ++# define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size */ ++# endif /* ! BLKGETSIZE64 */ + #endif /* __linux__ */ + + /* Use __FreeBSD_kernel__ instead of __FreeBSD__ for compatibility with +@@ -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,20 +297,16 @@ + #if defined(__linux__) + /* Linux */ + { +- struct hd_geometry hdg; +- unsigned long nr; ++ unsigned long long nr; + +- if (ioctl (fd, HDIO_GETGEO, &hdg)) +- goto fail; +- +- if (ioctl (fd, BLKGETSIZE, &nr)) ++ if (ioctl (fd, BLKGETSIZE64, &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; ++ geom->total_sectors = nr / 512; + + goto success; + } +@@ -403,10 +545,28 @@ + } + + static void ++get_cciss_disk_name (char *name, int controller, int drive) ++{ ++ sprintf (name, "/dev/cciss/c%dd%d", controller, drive); ++} ++ ++static void ++get_ida_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, char unit) ++{ ++ sprintf (name, "/dev/i2o/hd%c", unit); ++} + #endif + + /* Check if DEVICE can be read. If an error occurs, return zero, +@@ -801,6 +961,97 @@ + } + } + } ++ ++ /* This is for I2O - we have /dev/i2o/hd */ ++ { ++ int unit; ++ ++ for (unit = 'a'; unit < 'f'; unit++) ++ { ++ char name[24]; ++ ++ get_i2o_disk_name (name, unit); ++ 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++; ++ } ++ } ++ } ++ ++ /* This is for CCISS, its like the DAC960 - we have ++ /dev/cciss/dp ++ ++ It currently supports up to 3 controllers, 10 logical volumes ++ and 10 partitions ++ ++ Code gratuitously copied from DAC960 above. ++ Horms 23rd July 2004 ++ */ ++ { ++ int controller, drive; ++ ++ for (controller = 0; controller < 2; controller++) ++ { ++ for (drive = 0; drive < 9; 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++; ++ } ++ } ++ } ++ } ++ ++ /* This is for Compaq Smart Array, its like the DAC960 - we have ++ /dev/ida/dp ++ ++ It currently supports up to 3 controllers, 10 logical volumes ++ and 15 partitions ++ ++ Code gratuitously copied from DAC960 above. ++ Piotr Roszatycki ++ */ ++ { ++ int controller, drive; ++ ++ for (controller = 0; controller < 2; controller++) ++ { ++ for (drive = 0; drive < 9; drive++) ++ { ++ char name[24]; ++ ++ get_ida_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 +1095,7 @@ + { + char dev[PATH_MAX]; /* XXX */ + int fd; ++ off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; + + if ((partition & 0x00FF00) != 0x00FF00) + { +@@ -861,6 +1113,14 @@ + if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) + strcpy (dev + strlen(dev) - 5, "/part"); + } ++ else ++ { ++ if ((strncmp (dev, "/dev/ataraid/", 13) == 0) || ++ (strncmp (dev, "/dev/ida/", 9) == 0) || ++ (strncmp (dev, "/dev/cciss/", 11) == 0) || ++ (strncmp (dev, "/dev/rd/", 8) == 0)) ++ strcpy (dev + strlen(dev), "p"); ++ } + sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); + + /* Open the partition. */ +@@ -870,35 +1130,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 -Nur grub-0.97/netboot/cs89x0.c grub-0.97-patched/netboot/cs89x0.c +--- grub-0.97/netboot/cs89x0.c 2003-07-09 13:45:37.000000000 +0200 ++++ grub-0.97-patched/netboot/cs89x0.c 2012-11-11 17:07:12.722729437 +0100 +@@ -1,3 +1,21 @@ ++/** ++ Per an email message from Russ Nelson on ++ 18 March 2008 this file is now licensed under GPL Version 2. ++ ++ From: Russ Nelson ++ Date: Tue, 18 Mar 2008 12:42:00 -0400 ++ Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot ++ -- quote from email ++ As copyright holder, if I say it doesn't conflict with the GPL, ++ then it doesn't conflict with the GPL. ++ ++ However, there's no point in causing people's brains to overheat, ++ so yes, I grant permission for the code to be relicensed under the ++ GPLv2. Please make sure that this change in licensing makes its ++ way upstream. -russ ++ -- quote from email ++**/ ++ + /* cs89x0.c: A Crystal Semiconductor CS89[02]0 driver for etherboot. */ + /* + Permission is granted to distribute the enclosed cs89x0.[ch] driver +diff -Nur grub-0.97/netboot/cs89x0.h grub-0.97-patched/netboot/cs89x0.h +--- grub-0.97/netboot/cs89x0.h 2003-07-09 13:45:37.000000000 +0200 ++++ grub-0.97-patched/netboot/cs89x0.h 2012-11-11 17:07:12.723729469 +0100 +@@ -1,3 +1,21 @@ ++/** ++ Per an email message from Russ Nelson on ++ 18 March 2008 this file is now licensed under GPL Version 2. ++ ++ From: Russ Nelson ++ Date: Tue, 18 Mar 2008 12:42:00 -0400 ++ Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot ++ -- quote from email ++ As copyright holder, if I say it doesn't conflict with the GPL, ++ then it doesn't conflict with the GPL. ++ ++ However, there's no point in causing people's brains to overheat, ++ so yes, I grant permission for the code to be relicensed under the ++ GPLv2. Please make sure that this change in licensing makes its ++ way upstream. -russ ++ -- quote from email ++**/ ++ + /* Copyright, 1988-1992, Russell Nelson, Crynwr Software + + This program is free software; you can redistribute it and/or modify +diff -Nur grub-0.97/netboot/etherboot.h grub-0.97-patched/netboot/etherboot.h +--- grub-0.97/netboot/etherboot.h 2003-07-09 13:45:37.000000000 +0200 ++++ grub-0.97-patched/netboot/etherboot.h 2012-11-11 17:07:12.723729469 +0100 +@@ -531,9 +531,6 @@ + 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 -Nur grub-0.97/netboot/main.c grub-0.97-patched/netboot/main.c +--- grub-0.97/netboot/main.c 2004-05-21 00:19:33.000000000 +0200 ++++ grub-0.97-patched/netboot/main.c 2012-11-11 17:07:12.724729500 +0100 +@@ -56,7 +56,8 @@ + static unsigned long netmask; + static struct bootpd_t bootp_data; + static unsigned long xid; +-static unsigned char *end_of_rfc1533 = NULL; ++ ++#define BOOTP_DATA_ADDR (&bootp_data) + + #ifndef NO_DHCP_SUPPORT + #endif /* NO_DHCP_SUPPORT */ +@@ -83,7 +84,9 @@ + RFC2132_MAX_SIZE,2, /* request as much as we can */ + ETH_MAX_MTU / 256, ETH_MAX_MTU % 256, + RFC2132_PARAM_LIST, 4, RFC1533_NETMASK, RFC1533_GATEWAY, +- RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH ++ RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH, ++ /* Vendor class identifier */ ++ RFC2132_VENDOR_CLASS_ID, 10, 'G', 'R', 'U', 'B', 'C', 'l', 'i', 'e', 'n', 't', + }; + + static const unsigned char dhcprequest[] = +@@ -103,6 +106,8 @@ + /* Etherboot vendortags */ + RFC1533_VENDOR_MAGIC, + RFC1533_VENDOR_CONFIGFILE, ++ /* Vendor class identifier */ ++ RFC2132_VENDOR_CLASS_ID, 10, 'G', 'R', 'U', 'B', 'C', 'l', 'i', 'e', 'n', 't', + }; + + #endif /* ! NO_DHCP_SUPPORT */ +@@ -701,7 +706,7 @@ + "adcw %%ax,%0\n\t" /* add carry of previous iteration */ + "loop 1b\n\t" + "adcw $0,%0" /* add carry of last iteration */ +- : "=b" (*sum), "=S"(start), "=c"(len) ++ : "=r" (*sum), "=S"(start), "=c"(len) + : "0"(*sum), "1"(start), "2"(len) + : "ax", "cc" + ); +@@ -967,7 +972,6 @@ + + if (block == 0) + { +- end_of_rfc1533 = NULL; + vendorext_isvalid = 0; + + if (grub_memcmp (p, rfc1533_cookie, 4)) +@@ -1021,7 +1025,7 @@ + } + else if (c == RFC1533_END) + { +- end_of_rfc1533 = endp = p; ++ endp = p; + continue; + } + else if (c == RFC1533_NETMASK) +diff -Nur grub-0.97/netboot/natsemi.c grub-0.97-patched/netboot/natsemi.c +--- grub-0.97/netboot/natsemi.c 2003-07-09 13:45:38.000000000 +0200 ++++ grub-0.97-patched/netboot/natsemi.c 2012-11-11 17:07:12.724729500 +0100 +@@ -608,7 +608,7 @@ + const char *p) /* Packet */ + { + u32 status, to, nstype; +- u32 tx_status; ++ volatile u32 tx_status; + + /* Stop the transmitter */ + outl(TxOff, ioaddr + ChipCmd); +@@ -647,7 +647,7 @@ + + to = currticks() + TX_TIMEOUT; + +- while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to)) ++ while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to)) + /* wait */ ; + + if (currticks() >= to) { +diff -Nur grub-0.97/netboot/pci.c grub-0.97-patched/netboot/pci.c +--- grub-0.97/netboot/pci.c 2003-07-09 13:45:38.000000000 +0200 ++++ grub-0.97-patched/netboot/pci.c 2012-11-11 17:07:07.227553894 +0100 +@@ -105,13 +105,16 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK +- "lcall (%%edi)" ++ "lcall (%%edi)\n\t" + #else +- "lcall *(%%edi)" ++ "lcall *(%%edi)\n\t" + #endif ++ "movl %%ebx, %1\n\t" /* capture what was in %ebx */ ++ "popl %%ebx\n\t" /* restore %ebx */ + : "=a" (return_code), +- "=b" (address), ++ "=r" (address), + "=c" (length), + "=d" (entry) + : "0" (service), +@@ -141,18 +144,21 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=c" (*value), + "=a" (ret) + : "1" (PCIBIOS_READ_CONFIG_BYTE), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -168,18 +174,21 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=c" (*value), + "=a" (ret) + : "1" (PCIBIOS_READ_CONFIG_WORD), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -195,18 +204,21 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=c" (*value), + "=a" (ret) + : "1" (PCIBIOS_READ_CONFIG_DWORD), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -222,18 +234,21 @@ + + save_flags(flags); cli(); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=a" (ret) + : "0" (PCIBIOS_WRITE_CONFIG_BYTE), + "c" (value), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -249,18 +264,21 @@ + + save_flags(flags); cli(); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=a" (ret) + : "0" (PCIBIOS_WRITE_CONFIG_WORD), + "c" (value), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -276,18 +294,21 @@ + + save_flags(flags); cli(); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=a" (ret) + : "0" (PCIBIOS_WRITE_CONFIG_DWORD), + "c" (value), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -308,20 +329,22 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%edi)\n\t" + #else + "lcall *(%%edi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "xor %%ah, %%ah\n\t" + "1:\tshl $8, %%eax\n\t" +- "movw %%bx, %%ax" ++ "movw %%bx, %%ax\n\t" ++ "popl %%ebx\n\t" /* restore %ebx */ + : "=d" (signature), + "=a" (pack) + : "1" (PCIBIOS_PCI_BIOS_PRESENT), + "D" (&pci_indirect) +- : "bx", "cx"); ++ : "cx"); + restore_flags(flags); + + present_status = (pack >> 16) & 0xff; +diff -Nur grub-0.97/netboot/sis900.c grub-0.97-patched/netboot/sis900.c +--- grub-0.97/netboot/sis900.c 2003-07-09 13:45:38.000000000 +0200 ++++ grub-0.97-patched/netboot/sis900.c 2012-11-11 17:07:12.725729531 +0100 +@@ -901,7 +901,7 @@ + const char *p) /* Packet */ + { + u32 status, to, nstype; +- u32 tx_status; ++ volatile u32 tx_status; + + /* Stop the transmitter */ + outl(TxDIS, ioaddr + cr); +@@ -940,7 +940,7 @@ + + to = currticks() + TX_TIMEOUT; + +- while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to)) ++ while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to)) + /* wait */ ; + + if (currticks() >= to) { +diff -Nur grub-0.97/stage1/Makefile.am grub-0.97-patched/stage1/Makefile.am +--- grub-0.97/stage1/Makefile.am 2004-07-16 13:44:56.000000000 +0200 ++++ grub-0.97-patched/stage1/Makefile.am 2012-11-11 17:07:12.747730236 +0100 +@@ -1,11 +1,11 @@ +-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) +-nodist_pkglib_DATA = stage1 ++stagedir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++nodist_stage_DATA = stage1 + +-CLEANFILES = $(nodist_pkglib_DATA) ++CLEANFILES = $(nodist_stage_DATA) + + # We can't use builtins or standard includes. + AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc +-LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 ++stage1_exec_LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 + + noinst_PROGRAMS = stage1.exec + stage1_exec_SOURCES = stage1.S stage1.h +diff -Nur grub-0.97/stage2/asm.S grub-0.97-patched/stage2/asm.S +--- grub-0.97/stage2/asm.S 2004-06-19 18:55:22.000000000 +0200 ++++ grub-0.97-patched/stage2/asm.S 2012-11-11 17:07:03.850446017 +0100 +@@ -1651,7 +1651,29 @@ + 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 +1683,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 +1709,8 @@ + + gloop1: + inb $K_STATUS ++ cmpb $0xff, %al ++ jz gloop2ret + andb $K_IBUF_FUL, %al + jnz gloop1 + +@@ -1991,6 +2018,11 @@ + ENTRY(console_getkey) + push %ebp + ++wait_for_key: ++ call EXT_C(console_checkkey) ++ incl %eax ++ jz wait_for_key ++ + call EXT_C(prot_to_real) + .code16 + +@@ -2216,6 +2248,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() +diff -Nur grub-0.97/stage2/bios.c grub-0.97-patched/stage2/bios.c +--- grub-0.97/stage2/bios.c 2004-03-27 17:34:04.000000000 +0100 ++++ grub-0.97-patched/stage2/bios.c 2012-11-11 17:07:12.751730363 +0100 +@@ -47,7 +47,7 @@ + return the error number. Otherwise, return 0. */ + int + biosdisk (int read, int drive, struct geometry *geometry, +- int sector, int nsec, int segment) ++ unsigned int sector, int nsec, int segment) + { + int err; + +@@ -60,7 +60,18 @@ + unsigned short blocks; + unsigned long buffer; + unsigned long long block; +- } __attribute__ ((packed)) dap; ++ ++ /* This structure is passed in the stack. A buggy BIOS could write ++ * garbage data to the tail of the struct and hang the machine. So ++ * we need this protection. - Tinybit ++ */ ++ unsigned char dummy[16]; ++ } __attribute__ ((packed)) *dap; ++ ++ /* Even the above protection is not enough to avoid stupid actions by ++ * buggy BIOSes. So we do it in the 0040:0000 segment. - Tinybit ++ */ ++ dap = (struct disk_address_packet *)0x580; + + /* XXX: Don't check the geometry by default, because some buggy + BIOSes don't return the number of total sectors correctly, +@@ -72,15 +83,15 @@ + + /* FIXME: sizeof (DAP) must be 0x10. Should assert that the compiler + can't add any padding. */ +- dap.length = sizeof (dap); +- dap.block = sector; +- dap.blocks = nsec; +- dap.reserved = 0; ++ dap->length = 0x10; ++ dap->block = sector; ++ dap->blocks = nsec; ++ dap->reserved = 0; + /* This is undocumented part. The address is formated in + SEGMENT:ADDRESS. */ +- dap.buffer = segment << 16; ++ dap->buffer = segment << 16; + +- err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, &dap); ++ err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, dap); + + /* #undef NO_INT13_FALLBACK */ + #ifndef NO_INT13_FALLBACK +diff -Nur grub-0.97/stage2/boot.c grub-0.97-patched/stage2/boot.c +--- grub-0.97/stage2/boot.c 2004-03-30 13:44:08.000000000 +0200 ++++ grub-0.97-patched/stage2/boot.c 2012-11-11 17:07:12.727729596 +0100 +@@ -1,7 +1,7 @@ + /* boot.c - load and bootstrap a kernel */ + /* + * GRUB -- GRand Unified Bootloader +- * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. ++ * Copyright (C) 1999,2000,2001,2002,2003,2004,2005 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 +@@ -96,7 +96,7 @@ + lh = (struct linux_kernel_header *) buffer; + + /* ELF loading supported if multiboot, FreeBSD and NetBSD. */ +- if ((type == KERNEL_TYPE_MULTIBOOT ++ if (((type == KERNEL_TYPE_MULTIBOOT && ! (flags & MULTIBOOT_AOUT_KLUDGE)) + || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD + || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0 + || suggested_type == KERNEL_TYPE_NETBSD) +@@ -241,7 +241,7 @@ + } + + if (lh->version >= 0x0202) +- lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET; ++ lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_0202_PRM_OFFSET; + else + { + lh->cl_magic = LINUX_CL_MAGIC; +@@ -407,6 +407,15 @@ + while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src) + *(dest++) = *(src++); + ++ { ++ char *src = skip_to (0, arg); ++ char *dest = linux_data_tmp_addr + LINUX_CL_0202_PRM_OFFSET; ++ ++ while (dest < linux_data_tmp_addr + LINUX_CL_0202_PRM_END_OFFSET && *src) ++ *(dest++) = *(src++); ++ *dest = 0; ++ } ++ + /* Old Linux kernels have problems determining the amount of + the available memory. To work around this problem, we add + the "mem" option to the kernel command line. This has its +@@ -824,8 +833,11 @@ + moveto = (mbi.mem_upper + 0x400) << 10; + + moveto = (moveto - len) & 0xfffff000; +- max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 +- ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); ++ max_addr = LINUX_INITRD_MAX_ADDRESS; ++ if (lh->header == LINUX_MAGIC_SIGNATURE && ++ lh->version >= 0x0203 && ++ lh->initrd_addr_max < max_addr) ++ max_addr = lh->initrd_addr_max; + if (moveto + len >= max_addr) + moveto = (max_addr - len) & 0xfffff000; + +diff -Nur grub-0.97/stage2/boot.c.orig grub-0.97-patched/stage2/boot.c.orig +--- grub-0.97/stage2/boot.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/boot.c.orig 2004-03-30 13:44:08.000000000 +0200 +@@ -0,0 +1,1020 @@ ++/* boot.c - load and bootstrap a kernel */ ++/* ++ * 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. ++ */ ++ ++ ++#include "shared.h" ++ ++#include "freebsd.h" ++#include "imgact_aout.h" ++#include "i386-elf.h" ++ ++static int cur_addr; ++entry_func entry_addr; ++static struct mod_list mll[99]; ++static int linux_mem_size; ++ ++/* ++ * The next two functions, 'load_image' and 'load_module', are the building ++ * blocks of the multiboot loader component. They handle essentially all ++ * of the gory details of loading in a bootable image and the modules. ++ */ ++ ++kernel_t ++load_image (char *kernel, char *arg, kernel_t suggested_type, ++ unsigned long load_flags) ++{ ++ int len, i, exec_type = 0, align_4k = 1; ++ entry_func real_entry_addr = 0; ++ kernel_t type = KERNEL_TYPE_NONE; ++ unsigned long flags = 0, text_len = 0, data_len = 0, bss_len = 0; ++ char *str = 0, *str2 = 0; ++ struct linux_kernel_header *lh; ++ union ++ { ++ struct multiboot_header *mb; ++ struct exec *aout; ++ Elf32_Ehdr *elf; ++ } ++ pu; ++ /* presuming that MULTIBOOT_SEARCH is large enough to encompass an ++ executable header */ ++ unsigned char buffer[MULTIBOOT_SEARCH]; ++ ++ /* sets the header pointer to point to the beginning of the ++ buffer by default */ ++ pu.aout = (struct exec *) buffer; ++ ++ if (!grub_open (kernel)) ++ return KERNEL_TYPE_NONE; ++ ++ if (!(len = grub_read (buffer, MULTIBOOT_SEARCH)) || len < 32) ++ { ++ grub_close (); ++ ++ if (!errnum) ++ errnum = ERR_EXEC_FORMAT; ++ ++ return KERNEL_TYPE_NONE; ++ } ++ ++ for (i = 0; i < len; i++) ++ { ++ if (MULTIBOOT_FOUND ((int) (buffer + i), len - i)) ++ { ++ flags = ((struct multiboot_header *) (buffer + i))->flags; ++ if (flags & MULTIBOOT_UNSUPPORTED) ++ { ++ grub_close (); ++ errnum = ERR_BOOT_FEATURES; ++ return KERNEL_TYPE_NONE; ++ } ++ type = KERNEL_TYPE_MULTIBOOT; ++ str2 = "Multiboot"; ++ break; ++ } ++ } ++ ++ /* Use BUFFER as a linux kernel header, if the image is Linux zImage ++ or bzImage. */ ++ lh = (struct linux_kernel_header *) buffer; ++ ++ /* 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 ++ || suggested_type == KERNEL_TYPE_NETBSD) ++ && len > sizeof (Elf32_Ehdr) ++ && BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer)))) ++ { ++ if (type == KERNEL_TYPE_MULTIBOOT) ++ entry_addr = (entry_func) pu.elf->e_entry; ++ else ++ entry_addr = (entry_func) (pu.elf->e_entry & 0xFFFFFF); ++ ++ if (entry_addr < (entry_func) 0x100000) ++ errnum = ERR_BELOW_1MB; ++ ++ /* don't want to deal with ELF program header at some random ++ place in the file -- this generally won't happen */ ++ if (pu.elf->e_phoff == 0 || pu.elf->e_phnum == 0 ++ || ((pu.elf->e_phoff + (pu.elf->e_phentsize * pu.elf->e_phnum)) ++ >= len)) ++ errnum = ERR_EXEC_FORMAT; ++ str = "elf"; ++ ++ if (type == KERNEL_TYPE_NONE) ++ { ++ /* At the moment, there is no way to identify a NetBSD ELF ++ kernel, so rely on the suggested type by the user. */ ++ if (suggested_type == KERNEL_TYPE_NETBSD) ++ { ++ str2 = "NetBSD"; ++ type = suggested_type; ++ } ++ else ++ { ++ str2 = "FreeBSD"; ++ type = KERNEL_TYPE_FREEBSD; ++ } ++ } ++ } ++ else if (flags & MULTIBOOT_AOUT_KLUDGE) ++ { ++ pu.mb = (struct multiboot_header *) (buffer + i); ++ entry_addr = (entry_func) pu.mb->entry_addr; ++ cur_addr = pu.mb->load_addr; ++ /* first offset into file */ ++ grub_seek (i - (pu.mb->header_addr - cur_addr)); ++ ++ /* If the load end address is zero, load the whole contents. */ ++ if (! pu.mb->load_end_addr) ++ pu.mb->load_end_addr = cur_addr + filemax; ++ ++ text_len = pu.mb->load_end_addr - cur_addr; ++ data_len = 0; ++ ++ /* If the bss end address is zero, assume that there is no bss area. */ ++ if (! pu.mb->bss_end_addr) ++ pu.mb->bss_end_addr = pu.mb->load_end_addr; ++ ++ bss_len = pu.mb->bss_end_addr - pu.mb->load_end_addr; ++ ++ if (pu.mb->header_addr < pu.mb->load_addr ++ || pu.mb->load_end_addr <= pu.mb->load_addr ++ || pu.mb->bss_end_addr < pu.mb->load_end_addr ++ || (pu.mb->header_addr - pu.mb->load_addr) > i) ++ errnum = ERR_EXEC_FORMAT; ++ ++ if (cur_addr < 0x100000) ++ errnum = ERR_BELOW_1MB; ++ ++ pu.aout = (struct exec *) buffer; ++ exec_type = 2; ++ str = "kludge"; ++ } ++ else if (len > sizeof (struct exec) && !N_BADMAG ((*(pu.aout)))) ++ { ++ entry_addr = (entry_func) pu.aout->a_entry; ++ ++ if (type == KERNEL_TYPE_NONE) ++ { ++ /* ++ * If it doesn't have a Multiboot header, then presume ++ * it is either a FreeBSD or NetBSD executable. If so, ++ * then use a magic number of normal ordering, ZMAGIC to ++ * determine if it is FreeBSD. ++ * ++ * This is all because freebsd and netbsd seem to require ++ * masking out some address bits... differently for each ++ * one... plus of course we need to know which booting ++ * method to use. ++ */ ++ entry_addr = (entry_func) ((int) entry_addr & 0xFFFFFF); ++ ++ if (buffer[0] == 0xb && buffer[1] == 1) ++ { ++ type = KERNEL_TYPE_FREEBSD; ++ cur_addr = (int) entry_addr; ++ str2 = "FreeBSD"; ++ } ++ else ++ { ++ type = KERNEL_TYPE_NETBSD; ++ cur_addr = (int) entry_addr & 0xF00000; ++ if (N_GETMAGIC ((*(pu.aout))) != NMAGIC) ++ align_4k = 0; ++ str2 = "NetBSD"; ++ } ++ } ++ ++ /* first offset into file */ ++ grub_seek (N_TXTOFF (*(pu.aout))); ++ text_len = pu.aout->a_text; ++ data_len = pu.aout->a_data; ++ bss_len = pu.aout->a_bss; ++ ++ if (cur_addr < 0x100000) ++ errnum = ERR_BELOW_1MB; ++ ++ exec_type = 1; ++ str = "a.out"; ++ } ++ else if (lh->boot_flag == BOOTSEC_SIGNATURE ++ && lh->setup_sects <= LINUX_MAX_SETUP_SECTS) ++ { ++ int big_linux = 0; ++ int setup_sects = lh->setup_sects; ++ ++ if (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0200) ++ { ++ big_linux = (lh->loadflags & LINUX_FLAG_BIG_KERNEL); ++ lh->type_of_loader = LINUX_BOOT_LOADER_TYPE; ++ ++ /* Put the real mode part at as a high location as possible. */ ++ linux_data_real_addr ++ = (char *) ((mbi.mem_lower << 10) - LINUX_SETUP_MOVE_SIZE); ++ /* But it must not exceed the traditional area. */ ++ if (linux_data_real_addr > (char *) LINUX_OLD_REAL_MODE_ADDR) ++ linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR; ++ ++ if (lh->version >= 0x0201) ++ { ++ lh->heap_end_ptr = LINUX_HEAP_END_OFFSET; ++ lh->loadflags |= LINUX_FLAG_CAN_USE_HEAP; ++ } ++ ++ if (lh->version >= 0x0202) ++ lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET; ++ else ++ { ++ lh->cl_magic = LINUX_CL_MAGIC; ++ lh->cl_offset = LINUX_CL_OFFSET; ++ lh->setup_move_size = LINUX_SETUP_MOVE_SIZE; ++ } ++ } ++ else ++ { ++ /* Your kernel is quite old... */ ++ lh->cl_magic = LINUX_CL_MAGIC; ++ lh->cl_offset = LINUX_CL_OFFSET; ++ ++ setup_sects = LINUX_DEFAULT_SETUP_SECTS; ++ ++ linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR; ++ } ++ ++ /* If SETUP_SECTS is not set, set it to the default (4). */ ++ if (! setup_sects) ++ setup_sects = LINUX_DEFAULT_SETUP_SECTS; ++ ++ data_len = setup_sects << 9; ++ text_len = filemax - data_len - SECTOR_SIZE; ++ ++ linux_data_tmp_addr = (char *) LINUX_BZIMAGE_ADDR + text_len; ++ ++ if (! big_linux ++ && text_len > linux_data_real_addr - (char *) LINUX_ZIMAGE_ADDR) ++ { ++ grub_printf (" linux 'zImage' kernel too big, try 'make bzImage'\n"); ++ errnum = ERR_WONT_FIT; ++ } ++ else if (linux_data_real_addr + LINUX_SETUP_MOVE_SIZE ++ > RAW_ADDR ((char *) (mbi.mem_lower << 10))) ++ errnum = ERR_WONT_FIT; ++ else ++ { ++ grub_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", ++ (big_linux ? "bzImage" : "zImage"), data_len, text_len); ++ ++ /* Video mode selection support. What a mess! */ ++ /* NOTE: Even the word "mess" is not still enough to ++ represent how wrong and bad the Linux video support is, ++ but I don't want to hear complaints from Linux fanatics ++ any more. -okuji */ ++ { ++ char *vga; ++ ++ /* Find the substring "vga=". */ ++ vga = grub_strstr (arg, "vga="); ++ if (vga) ++ { ++ char *value = vga + 4; ++ int vid_mode; ++ ++ /* Handle special strings. */ ++ if (substring ("normal", value) < 1) ++ vid_mode = LINUX_VID_MODE_NORMAL; ++ else if (substring ("ext", value) < 1) ++ vid_mode = LINUX_VID_MODE_EXTENDED; ++ else if (substring ("ask", value) < 1) ++ vid_mode = LINUX_VID_MODE_ASK; ++ else if (safe_parse_maxint (&value, &vid_mode)) ++ ; ++ else ++ { ++ /* ERRNUM is already set inside the function ++ safe_parse_maxint. */ ++ grub_close (); ++ return KERNEL_TYPE_NONE; ++ } ++ ++ lh->vid_mode = vid_mode; ++ } ++ } ++ ++ /* 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_maxint (&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 > (MAXINT >> shift)) ++ linux_mem_size = LINUX_INITRD_MAX_ADDRESS; ++ else ++ linux_mem_size <<= shift; ++ } ++ break; ++ ++ default: ++ linux_mem_size = 0; ++ errnum = ERR_NONE; ++ break; ++ } ++ } ++ else ++ linux_mem_size = 0; ++ } ++ ++ /* 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) ++ grub_memmove (linux_data_tmp_addr, buffer, ++ data_len + SECTOR_SIZE); ++ else ++ { ++ grub_memmove (linux_data_tmp_addr, buffer, MULTIBOOT_SEARCH); ++ grub_read (linux_data_tmp_addr + MULTIBOOT_SEARCH, ++ data_len + SECTOR_SIZE - MULTIBOOT_SEARCH); ++ } ++ ++ if (lh->header != LINUX_MAGIC_SIGNATURE || ++ lh->version < 0x0200) ++ /* Clear the heap space. */ ++ grub_memset (linux_data_tmp_addr + ((setup_sects + 1) << 9), ++ 0, ++ (64 - setup_sects - 1) << 9); ++ ++ /* Copy command-line plus memory hack to staging area. ++ NOTE: Linux has a bug that it doesn't handle multiple spaces ++ between two options and a space after a "mem=" option isn't ++ removed correctly so the arguments to init could be like ++ {"init", "", "", NULL}. This affects some not-very-clever ++ shells. Thus, the code below does a trick to avoid the bug. ++ That is, copy "mem=XXX" to the end of the command-line, and ++ avoid to copy spaces unnecessarily. Hell. */ ++ { ++ 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) ++ *(dest++) = *(src++); ++ ++ /* Old Linux kernels have problems determining the amount of ++ the available memory. To work around this problem, we add ++ the "mem" option to the kernel command line. This has its ++ own drawbacks because newer kernels can determine the ++ memory map more accurately. Boot protocol 2.03, which ++ appeared in Linux 2.4.18, provides a pointer to the kernel ++ version string, so we could check it. But since kernel ++ 2.4.18 and newer are known to detect memory reliably, boot ++ protocol 2.03 already implies that the kernel is new ++ enough. The "mem" option is added if neither of the ++ following conditions is met: ++ 1) The "mem" option is already present. ++ 2) The "kernel" command is used with "--no-mem-option". ++ 3) GNU GRUB is configured not to pass the "mem" option. ++ 4) The kernel supports boot protocol 2.03 or newer. */ ++ 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++ = ' '; ++ *dest++ = 'm'; ++ *dest++ = 'e'; ++ *dest++ = 'm'; ++ *dest++ = '='; ++ ++ dest = convert_to_ascii (dest, 'u', (extended_memory + 0x400)); ++ *dest++ = 'K'; ++ } ++ ++ *dest = 0; ++ } ++ ++ /* offset into file */ ++ grub_seek (data_len + SECTOR_SIZE); ++ ++ cur_addr = (int) linux_data_tmp_addr + LINUX_SETUP_MOVE_SIZE; ++ grub_read ((char *) LINUX_BZIMAGE_ADDR, text_len); ++ ++ if (errnum == ERR_NONE) ++ { ++ grub_close (); ++ ++ /* Sanity check. */ ++ if (suggested_type != KERNEL_TYPE_NONE ++ && ((big_linux && suggested_type != KERNEL_TYPE_BIG_LINUX) ++ || (! big_linux && suggested_type != KERNEL_TYPE_LINUX))) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ return KERNEL_TYPE_NONE; ++ } ++ ++ /* Ugly hack. */ ++ linux_text_len = text_len; ++ ++ return big_linux ? KERNEL_TYPE_BIG_LINUX : KERNEL_TYPE_LINUX; ++ } ++ } ++ } ++ else /* no recognizable format */ ++ errnum = ERR_EXEC_FORMAT; ++ ++ /* return if error */ ++ if (errnum) ++ { ++ grub_close (); ++ return KERNEL_TYPE_NONE; ++ } ++ ++ /* fill the multiboot info structure */ ++ mbi.cmdline = (int) arg; ++ mbi.mods_count = 0; ++ mbi.mods_addr = 0; ++ mbi.boot_device = (current_drive << 24) | current_partition; ++ mbi.flags &= ~(MB_INFO_MODS | MB_INFO_AOUT_SYMS | MB_INFO_ELF_SHDR); ++ mbi.syms.a.tabsize = 0; ++ mbi.syms.a.strsize = 0; ++ mbi.syms.a.addr = 0; ++ mbi.syms.a.pad = 0; ++ ++ printf (" [%s-%s", str2, str); ++ ++ str = ""; ++ ++ if (exec_type) /* can be loaded like a.out */ ++ { ++ if (flags & MULTIBOOT_AOUT_KLUDGE) ++ str = "-and-data"; ++ ++ 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) ++ { ++ cur_addr += text_len; ++ ++ if (!(flags & MULTIBOOT_AOUT_KLUDGE)) ++ { ++ /* we have to align to a 4K boundary */ ++ if (align_4k) ++ cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; ++ else ++ printf (", C"); ++ ++ printf (", data=0x%x", data_len); ++ ++ if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len) ++ != data_len) ++ && !errnum) ++ errnum = ERR_EXEC_FORMAT; ++ cur_addr += data_len; ++ } ++ ++ if (!errnum) ++ { ++ memset ((char *) RAW_ADDR (cur_addr), 0, bss_len); ++ cur_addr += bss_len; ++ ++ printf (", bss=0x%x", bss_len); ++ } ++ } ++ else if (!errnum) ++ errnum = ERR_EXEC_FORMAT; ++ ++ if (!errnum && pu.aout->a_syms ++ && pu.aout->a_syms < (filemax - filepos)) ++ { ++ int symtab_err, orig_addr = cur_addr; ++ ++ /* we should align to a 4K boundary here for good measure */ ++ if (align_4k) ++ cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; ++ ++ mbi.syms.a.addr = cur_addr; ++ ++ *((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms; ++ cur_addr += sizeof (int); ++ ++ printf (", symtab=0x%x", pu.aout->a_syms); ++ ++ if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms) ++ == pu.aout->a_syms) ++ { ++ cur_addr += pu.aout->a_syms; ++ mbi.syms.a.tabsize = pu.aout->a_syms; ++ ++ if (grub_read ((char *) &i, sizeof (int)) == sizeof (int)) ++ { ++ *((int *) RAW_ADDR (cur_addr)) = i; ++ cur_addr += sizeof (int); ++ ++ mbi.syms.a.strsize = i; ++ ++ i -= sizeof (int); ++ ++ printf (", strtab=0x%x", i); ++ ++ symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i) ++ != i); ++ cur_addr += i; ++ } ++ else ++ symtab_err = 1; ++ } ++ else ++ symtab_err = 1; ++ ++ if (symtab_err) ++ { ++ printf ("(bad)"); ++ cur_addr = orig_addr; ++ mbi.syms.a.tabsize = 0; ++ mbi.syms.a.strsize = 0; ++ mbi.syms.a.addr = 0; ++ } ++ else ++ mbi.flags |= MB_INFO_AOUT_SYMS; ++ } ++ } ++ else ++ /* ELF executable */ ++ { ++ unsigned loaded = 0, memaddr, memsiz, filesiz; ++ Elf32_Phdr *phdr; ++ ++ /* reset this to zero for now */ ++ cur_addr = 0; ++ ++ /* scan for program segments */ ++ for (i = 0; i < pu.elf->e_phnum; i++) ++ { ++ phdr = (Elf32_Phdr *) ++ (pu.elf->e_phoff + ((int) buffer) ++ + (pu.elf->e_phentsize * i)); ++ if (phdr->p_type == PT_LOAD) ++ { ++ /* offset into file */ ++ grub_seek (phdr->p_offset); ++ filesiz = phdr->p_filesz; ++ ++ if (type == KERNEL_TYPE_FREEBSD || type == KERNEL_TYPE_NETBSD) ++ memaddr = RAW_ADDR (phdr->p_paddr & 0xFFFFFF); ++ else ++ memaddr = RAW_ADDR (phdr->p_paddr); ++ ++ memsiz = phdr->p_memsz; ++ if (memaddr < RAW_ADDR (0x100000)) ++ errnum = ERR_BELOW_1MB; ++ ++ /* If the memory range contains the entry address, get the ++ physical address here. */ ++ if (type == KERNEL_TYPE_MULTIBOOT ++ && (unsigned) entry_addr >= phdr->p_vaddr ++ && (unsigned) entry_addr < phdr->p_vaddr + memsiz) ++ real_entry_addr = (entry_func) ((unsigned) entry_addr ++ + memaddr - phdr->p_vaddr); ++ ++ /* make sure we only load what we're supposed to! */ ++ if (filesiz > memsiz) ++ filesiz = memsiz; ++ /* mark memory as used */ ++ if (cur_addr < memaddr + memsiz) ++ cur_addr = memaddr + memsiz; ++ printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz, ++ memsiz - filesiz); ++ /* increment number of segments */ ++ loaded++; ++ ++ /* load the segment */ ++ if (memcheck (memaddr, memsiz) ++ && grub_read ((char *) memaddr, filesiz) == filesiz) ++ { ++ if (memsiz > filesiz) ++ memset ((char *) (memaddr + filesiz), 0, memsiz - filesiz); ++ } ++ else ++ break; ++ } ++ } ++ ++ if (! errnum) ++ { ++ if (! loaded) ++ errnum = ERR_EXEC_FORMAT; ++ else ++ { ++ /* Load ELF symbols. */ ++ Elf32_Shdr *shdr = NULL; ++ int tab_size, sec_size; ++ int symtab_err = 0; ++ ++ mbi.syms.e.num = pu.elf->e_shnum; ++ mbi.syms.e.size = pu.elf->e_shentsize; ++ mbi.syms.e.shndx = pu.elf->e_shstrndx; ++ ++ /* We should align to a 4K boundary here for good measure. */ ++ if (align_4k) ++ cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; ++ ++ tab_size = pu.elf->e_shentsize * pu.elf->e_shnum; ++ ++ grub_seek (pu.elf->e_shoff); ++ if (grub_read ((char *) RAW_ADDR (cur_addr), tab_size) ++ == tab_size) ++ { ++ mbi.syms.e.addr = cur_addr; ++ shdr = (Elf32_Shdr *) mbi.syms.e.addr; ++ cur_addr += tab_size; ++ ++ printf (", shtab=0x%x", cur_addr); ++ ++ for (i = 0; i < mbi.syms.e.num; i++) ++ { ++ /* This section is a loaded section, ++ so we don't care. */ ++ if (shdr[i].sh_addr != 0) ++ continue; ++ ++ /* This section is empty, so we don't care. */ ++ if (shdr[i].sh_size == 0) ++ continue; ++ ++ /* Align the section to a sh_addralign bits boundary. */ ++ cur_addr = ((cur_addr + shdr[i].sh_addralign) & ++ - (int) shdr[i].sh_addralign); ++ ++ grub_seek (shdr[i].sh_offset); ++ ++ sec_size = shdr[i].sh_size; ++ ++ if (! (memcheck (cur_addr, sec_size) ++ && (grub_read ((char *) RAW_ADDR (cur_addr), ++ sec_size) ++ == sec_size))) ++ { ++ symtab_err = 1; ++ break; ++ } ++ ++ shdr[i].sh_addr = cur_addr; ++ cur_addr += sec_size; ++ } ++ } ++ else ++ symtab_err = 1; ++ ++ if (mbi.syms.e.addr < RAW_ADDR(0x10000)) ++ symtab_err = 1; ++ ++ if (symtab_err) ++ { ++ printf ("(bad)"); ++ mbi.syms.e.num = 0; ++ mbi.syms.e.size = 0; ++ mbi.syms.e.addr = 0; ++ mbi.syms.e.shndx = 0; ++ cur_addr = 0; ++ } ++ else ++ mbi.flags |= MB_INFO_ELF_SHDR; ++ } ++ } ++ } ++ ++ if (! errnum) ++ { ++ grub_printf (", entry=0x%x]\n", (unsigned) entry_addr); ++ ++ /* If the entry address is physically different from that of the ELF ++ header, correct it here. */ ++ if (real_entry_addr) ++ entry_addr = real_entry_addr; ++ } ++ else ++ { ++ putchar ('\n'); ++ type = KERNEL_TYPE_NONE; ++ } ++ ++ grub_close (); ++ ++ /* Sanity check. */ ++ if (suggested_type != KERNEL_TYPE_NONE && suggested_type != type) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ return KERNEL_TYPE_NONE; ++ } ++ ++ return type; ++} ++ ++int ++load_module (char *module, char *arg) ++{ ++ int len; ++ ++ /* if we are supposed to load on 4K boundaries */ ++ cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; ++ ++ if (!grub_open (module)) ++ return 0; ++ ++ len = grub_read ((char *) cur_addr, -1); ++ if (! len) ++ { ++ grub_close (); ++ return 0; ++ } ++ ++ 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; ++ mbi.mods_addr = (int) mll; ++ ++ mll[mbi.mods_count].cmdline = (int) arg; ++ mll[mbi.mods_count].mod_start = cur_addr; ++ cur_addr += len; ++ mll[mbi.mods_count].mod_end = cur_addr; ++ mll[mbi.mods_count].pad = 0; ++ ++ /* increment number of modules included */ ++ mbi.mods_count++; ++ ++ grub_close (); ++ return 1; ++} ++ ++int ++load_initrd (char *initrd) ++{ ++ int len; ++ unsigned long moveto; ++ unsigned long max_addr; ++ struct linux_kernel_header *lh ++ = (struct linux_kernel_header *) (cur_addr - LINUX_SETUP_MOVE_SIZE); ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 1; ++#endif ++ ++ if (! grub_open (initrd)) ++ goto fail; ++ ++ len = grub_read ((char *) cur_addr, -1); ++ if (! len) ++ { ++ grub_close (); ++ goto fail; ++ } ++ ++ if (linux_mem_size) ++ moveto = linux_mem_size; ++ else ++ moveto = (mbi.mem_upper + 0x400) << 10; ++ ++ moveto = (moveto - len) & 0xfffff000; ++ max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 ++ ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); ++ if (moveto + len >= max_addr) ++ moveto = (max_addr - len) & 0xfffff000; ++ ++ /* XXX: Linux 2.3.xx has a bug in the memory range check, so avoid ++ the last page. ++ XXX: 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. *sigh* */ ++ moveto -= 0x10000; ++ memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len); ++ ++ 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: ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 0; ++#endif ++ ++ return ! errnum; ++} ++ ++ ++#ifdef GRUB_UTIL ++/* Dummy function to fake the *BSD boot. */ ++static void ++bsd_boot_entry (int flags, int bootdev, int sym_start, int sym_end, ++ int mem_upper, int mem_lower) ++{ ++ stop (); ++} ++#endif ++ ++ ++/* ++ * All "*_boot" commands depend on the images being loaded into memory ++ * correctly, the variables in this file being set up correctly, and ++ * the root partition being set in the 'saved_drive' and 'saved_partition' ++ * variables. ++ */ ++ ++ ++void ++bsd_boot (kernel_t type, int bootdev, char *arg) ++{ ++ char *str; ++ int clval = 0, i; ++ struct bootinfo bi; ++ ++#ifdef GRUB_UTIL ++ entry_addr = (entry_func) bsd_boot_entry; ++#else ++ stop_floppy (); ++#endif ++ ++ while (*(++arg) && *arg != ' '); ++ str = arg; ++ while (*str) ++ { ++ if (*str == '-') ++ { ++ while (*str && *str != ' ') ++ { ++ if (*str == 'C') ++ clval |= RB_CDROM; ++ if (*str == 'a') ++ clval |= RB_ASKNAME; ++ if (*str == 'b') ++ clval |= RB_HALT; ++ if (*str == 'c') ++ clval |= RB_CONFIG; ++ if (*str == 'd') ++ clval |= RB_KDB; ++ if (*str == 'D') ++ clval |= RB_MULTIPLE; ++ if (*str == 'g') ++ clval |= RB_GDB; ++ if (*str == 'h') ++ clval |= RB_SERIAL; ++ if (*str == 'm') ++ clval |= RB_MUTE; ++ if (*str == 'r') ++ clval |= RB_DFLTROOT; ++ if (*str == 's') ++ clval |= RB_SINGLE; ++ if (*str == 'v') ++ clval |= RB_VERBOSE; ++ str++; ++ } ++ continue; ++ } ++ str++; ++ } ++ ++ if (type == KERNEL_TYPE_FREEBSD) ++ { ++ clval |= RB_BOOTINFO; ++ ++ bi.bi_version = BOOTINFO_VERSION; ++ ++ *arg = 0; ++ while ((--arg) > (char *) MB_CMDLINE_BUF && *arg != '/'); ++ if (*arg == '/') ++ bi.bi_kernelname = arg + 1; ++ else ++ bi.bi_kernelname = 0; ++ ++ bi.bi_nfs_diskless = 0; ++ bi.bi_n_bios_used = 0; /* this field is apparently unused */ ++ ++ for (i = 0; i < N_BIOS_GEOM; i++) ++ { ++ struct geometry geom; ++ ++ /* XXX Should check the return value. */ ++ get_diskinfo (i + 0x80, &geom); ++ /* FIXME: If HEADS or SECTORS is greater than 255, then this will ++ break the geometry information. That is a drawback of BSD ++ but not of GRUB. */ ++ bi.bi_bios_geom[i] = (((geom.cylinders - 1) << 16) ++ + (((geom.heads - 1) & 0xff) << 8) ++ + (geom.sectors & 0xff)); ++ } ++ ++ bi.bi_size = sizeof (struct bootinfo); ++ bi.bi_memsizes_valid = 1; ++ bi.bi_bios_dev = saved_drive; ++ bi.bi_basemem = mbi.mem_lower; ++ bi.bi_extmem = extended_memory; ++ ++ if (mbi.flags & MB_INFO_AOUT_SYMS) ++ { ++ bi.bi_symtab = mbi.syms.a.addr; ++ bi.bi_esymtab = mbi.syms.a.addr + 4 ++ + mbi.syms.a.tabsize + mbi.syms.a.strsize; ++ } ++#if 0 ++ else if (mbi.flags & MB_INFO_ELF_SHDR) ++ { ++ /* FIXME: Should check if a symbol table exists and, if exists, ++ pass the table to BI. */ ++ } ++#endif ++ else ++ { ++ bi.bi_symtab = 0; ++ bi.bi_esymtab = 0; ++ } ++ ++ /* call entry point */ ++ (*entry_addr) (clval, bootdev, 0, 0, 0, ((int) (&bi))); ++ } ++ else ++ { ++ /* ++ * We now pass the various bootstrap parameters to the loaded ++ * image via the argument list. ++ * ++ * This is the official list: ++ * ++ * arg0 = 8 (magic) ++ * arg1 = boot flags ++ * arg2 = boot device ++ * arg3 = start of symbol table (0 if not loaded) ++ * arg4 = end of symbol table (0 if not loaded) ++ * arg5 = transfer address from image ++ * arg6 = transfer address for next image pointer ++ * arg7 = conventional memory size (640) ++ * arg8 = extended memory size (8196) ++ * ++ * ...in actuality, we just pass the parameters used by the kernel. ++ */ ++ ++ /* call entry point */ ++ unsigned long end_mark; ++ ++ if (mbi.flags & MB_INFO_AOUT_SYMS) ++ end_mark = (mbi.syms.a.addr + 4 ++ + mbi.syms.a.tabsize + mbi.syms.a.strsize); ++ else ++ /* FIXME: it should be mbi.syms.e.size. */ ++ end_mark = 0; ++ ++ (*entry_addr) (clval, bootdev, 0, end_mark, ++ extended_memory, mbi.mem_lower); ++ } ++} +diff -Nur grub-0.97/stage2/builtins.c grub-0.97-patched/stage2/builtins.c +--- grub-0.97/stage2/builtins.c 2005-02-15 22:58:23.000000000 +0100 ++++ grub-0.97-patched/stage2/builtins.c 2012-11-11 17:07:12.729729661 +0100 +@@ -131,63 +131,98 @@ + } + + ++/* 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); ++ int *start_sector = &blocklist_func_context.start_sector; ++ int *num_sectors = &blocklist_func_context.num_sectors; ++ int *num_entries = &blocklist_func_context.num_entries; + +- /* 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; +- } +- } +- + /* Open the file. */ + if (! grub_open (arg)) + return 1; +@@ -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"); + +@@ -852,6 +887,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 +@@ -1233,14 +1400,15 @@ + for (drive = 0x80; drive < 0x88; drive++) + { + unsigned long part = 0xFFFFFF; +- unsigned long start, len, offset, ext_offset; +- int type, entry; ++ unsigned long start, len, offset, ext_offset, gpt_offset; ++ int type, entry, gpt_count, gpt_size; + 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) +@@ -1740,6 +1908,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) + { +@@ -1747,8 +1986,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; +@@ -1757,10 +2000,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? */ +@@ -1769,67 +2013,13 @@ + 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) +@@ -1862,10 +2052,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; + } +@@ -1961,17 +2151,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)) +@@ -1987,27 +2177,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) +@@ -2021,13 +2211,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; + +@@ -2110,7 +2300,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; + +@@ -2180,7 +2370,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; + } + } +@@ -2202,7 +2392,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; +@@ -2229,7 +2419,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, +@@ -2815,8 +3005,8 @@ + { + int new_type; + 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]; + + /* Get the drive and the partition. */ +@@ -2853,8 +3043,15 @@ + /* 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. */ +@@ -3830,15 +4027,15 @@ + { + char tmp[16]; + grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF); +- grub_strncat (device, tmp, 256); ++ grub_strncat (device, tmp, sizeof (device)); + } + if ((partition & 0x00FF00) != 0x00FF00) + { + char tmp[16]; + grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF)); +- grub_strncat (device, tmp, 256); ++ grub_strncat (device, tmp, sizeof (device)); + } +- grub_strncat (device, ")", 256); ++ grub_strncat (device, ")", sizeof (device)); + } + + int embed_stage1_5 (char *stage1_5, int drive, int partition) +@@ -4085,7 +4282,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) +@@ -4244,17 +4441,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; + } +@@ -4264,7 +4465,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" +@@ -4276,7 +4477,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 +@@ -4795,6 +4996,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 +@@ -4802,6 +5006,7 @@ + #endif /* SUPPORT_NETBOOT */ + &builtin_cat, + &builtin_chainloader, ++ &builtin_clear, + &builtin_cmp, + &builtin_color, + &builtin_configfile, +@@ -4821,6 +5026,9 @@ + &builtin_embed, + &builtin_fallback, + &builtin_find, ++#ifdef SUPPORT_GRAPHICS ++ &builtin_foreground, ++#endif + &builtin_fstest, + &builtin_geometry, + &builtin_halt, +@@ -4864,9 +5072,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 */ +diff -Nur grub-0.97/stage2/builtins.c.orig grub-0.97-patched/stage2/builtins.c.orig +--- grub-0.97/stage2/builtins.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/builtins.c.orig 2005-02-15 22:58:23.000000000 +0100 +@@ -0,0 +1,4884 @@ ++/* builtins.c - the GRUB builtin commands */ ++/* ++ * 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. ++ */ ++ ++/* Include stdio.h before shared.h, because we can't define ++ WITHOUT_LIBC_STUBS here. */ ++#ifdef GRUB_UTIL ++# include ++#endif ++ ++#include ++#include ++#include ++ ++#ifdef SUPPORT_NETBOOT ++# define GRUB 1 ++# include ++#endif ++ ++#ifdef SUPPORT_SERIAL ++# include ++# include ++#endif ++ ++#ifdef GRUB_UTIL ++# include ++#else /* ! GRUB_UTIL */ ++# include ++# include ++#endif /* ! GRUB_UTIL */ ++ ++#ifdef USE_MD5_PASSWORDS ++# include ++#endif ++ ++/* The type of kernel loaded. */ ++kernel_t kernel_type; ++/* The boot device. */ ++static int bootdev; ++/* True when the debug mode is turned on, and false ++ when it is turned off. */ ++int debug = 0; ++/* The default entry. */ ++int default_entry = 0; ++/* The fallback entry. */ ++int fallback_entryno; ++int fallback_entries[MAX_FALLBACK_ENTRIES]; ++/* The number of current entry. */ ++int current_entryno; ++/* The address for Multiboot command-line buffer. */ ++static char *mb_cmdline; ++/* The password. */ ++char *password; ++/* The password type. */ ++password_t password_type; ++/* The flag for indicating that the user is authoritative. */ ++int auth = 0; ++/* The timeout. */ ++int grub_timeout = -1; ++/* Whether to show the menu or not. */ ++int show_menu = 1; ++/* The BIOS drive map. */ ++static unsigned short bios_drive_map[DRIVE_MAP_SIZE + 1]; ++ ++/* Prototypes for allowing straightfoward calling of builtins functions ++ inside other functions. */ ++static int configfile_func (char *arg, int flags); ++ ++/* Initialize the data for builtins. */ ++void ++init_builtins (void) ++{ ++ kernel_type = KERNEL_TYPE_NONE; ++ /* BSD and chainloading evil hacks! */ ++ bootdev = set_bootdev (0); ++ mb_cmdline = (char *) MB_CMDLINE_BUF; ++} ++ ++/* Initialize the data for the configuration file. */ ++void ++init_config (void) ++{ ++ default_entry = 0; ++ password = 0; ++ fallback_entryno = -1; ++ fallback_entries[0] = -1; ++ grub_timeout = -1; ++} ++ ++/* Check a password for correctness. Returns 0 if password was ++ correct, and a value != 0 for error, similarly to strcmp. */ ++int ++check_password (char *entered, char* expected, password_t type) ++{ ++ switch (type) ++ { ++ case PASSWORD_PLAIN: ++ return strcmp (entered, expected); ++ ++#ifdef USE_MD5_PASSWORDS ++ case PASSWORD_MD5: ++ return check_md5_password (entered, expected); ++#endif ++ default: ++ /* unsupported password type: be secure */ ++ return 1; ++ } ++} ++ ++/* Print which sector is read when loading a file. */ ++static void ++disk_read_print_func (int sector, int offset, int length) ++{ ++ grub_printf ("[%d,%d,%d]", sector, offset, 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; ++ } ++ } ++ ++ /* Open the file. */ ++ if (! grub_open (arg)) ++ return 1; ++ ++ /* Print the device name. */ ++ grub_printf ("(%cd%d", ++ (current_drive & 0x80) ? 'h' : 'f', ++ current_drive & ~0x80); ++ ++ if ((current_partition & 0xFF0000) != 0xFF0000) ++ grub_printf (",%d", (current_partition >> 16) & 0xFF); ++ ++ if ((current_partition & 0x00FF00) != 0x00FF00) ++ grub_printf (",%c", 'a' + ((current_partition >> 8) & 0xFF)); ++ ++ grub_printf (")"); ++ ++ /* Read in the whole file to DUMMY. */ ++ disk_read_hook = disk_read_blocklist_func; ++ 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); ++ ++ grub_printf ("\n"); ++ ++ fail: ++ disk_read_hook = 0; ++ grub_close (); ++ return errnum; ++} ++ ++static struct builtin builtin_blocklist = ++{ ++ "blocklist", ++ blocklist_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "blocklist FILE", ++ "Print the blocklist notation of the file FILE." ++}; ++ ++/* boot */ ++static int ++boot_func (char *arg, int flags) ++{ ++ /* 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 (); ++ ++#ifdef SUPPORT_NETBOOT ++ /* Shut down the networking. */ ++ cleanup_net (); ++#endif ++ ++ switch (kernel_type) ++ { ++ case KERNEL_TYPE_FREEBSD: ++ case KERNEL_TYPE_NETBSD: ++ /* *BSD */ ++ bsd_boot (kernel_type, bootdev, (char *) mbi.cmdline); ++ break; ++ ++ case KERNEL_TYPE_LINUX: ++ /* Linux */ ++ linux_boot (); ++ break; ++ ++ case KERNEL_TYPE_BIG_LINUX: ++ /* Big Linux */ ++ big_linux_boot (); ++ break; ++ ++ case KERNEL_TYPE_CHAINLOADER: ++ /* Chainloader */ ++ ++ /* Check if we should set the int13 handler. */ ++ if (bios_drive_map[0] != 0) ++ { ++ int i; ++ ++ /* Search for SAVED_DRIVE. */ ++ for (i = 0; i < DRIVE_MAP_SIZE; i++) ++ { ++ if (! bios_drive_map[i]) ++ break; ++ else if ((bios_drive_map[i] & 0xFF) == saved_drive) ++ { ++ /* Exchage SAVED_DRIVE with the mapped drive. */ ++ saved_drive = (bios_drive_map[i] >> 8) & 0xFF; ++ break; ++ } ++ } ++ ++ /* Set the handler. This is somewhat dangerous. */ ++ set_int13_handler (bios_drive_map); ++ } ++ ++ gateA20 (0); ++ boot_drive = saved_drive; ++ chain_stage1 (0, BOOTSEC_LOCATION, boot_part_addr); ++ break; ++ ++ case KERNEL_TYPE_MULTIBOOT: ++ /* Multiboot */ ++ multi_boot ((int) entry_addr, (int) &mbi); ++ break; ++ ++ default: ++ errnum = ERR_BOOT_COMMAND; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_boot = ++{ ++ "boot", ++ boot_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "boot", ++ "Boot the OS/chain-loader which has been loaded." ++}; ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* bootp */ ++static int ++bootp_func (char *arg, int flags) ++{ ++ int with_configfile = 0; ++ ++ if (grub_memcmp (arg, "--with-configfile", sizeof ("--with-configfile") - 1) ++ == 0) ++ { ++ with_configfile = 1; ++ arg = skip_to (0, arg); ++ } ++ ++ if (! bootp ()) ++ { ++ if (errnum == ERR_NONE) ++ errnum = ERR_DEV_VALUES; ++ ++ return 1; ++ } ++ ++ /* Notify the configuration. */ ++ print_network_configuration (); ++ ++ /* XXX: this can cause an endless loop, but there is no easy way to ++ detect such a loop unfortunately. */ ++ if (with_configfile) ++ configfile_func (config_file, flags); ++ ++ return 0; ++} ++ ++static struct builtin builtin_bootp = ++{ ++ "bootp", ++ bootp_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "bootp [--with-configfile]", ++ "Initialize a network device via BOOTP. If the option `--with-configfile'" ++ " is given, try to load a configuration file specified by the 150 vendor" ++ " tag." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++/* cat */ ++static int ++cat_func (char *arg, int flags) ++{ ++ char c; ++ ++ if (! grub_open (arg)) ++ return 1; ++ ++ while (grub_read (&c, 1)) ++ { ++ /* Because running "cat" with a binary file can confuse the terminal, ++ print only some characters as they are. */ ++ if (grub_isspace (c) || (c >= ' ' && c <= '~')) ++ grub_putchar (c); ++ else ++ grub_putchar ('?'); ++ } ++ ++ grub_close (); ++ return 0; ++} ++ ++static struct builtin builtin_cat = ++{ ++ "cat", ++ cat_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "cat FILE", ++ "Print the contents of the file FILE." ++}; ++ ++ ++/* chainloader */ ++static int ++chainloader_func (char *arg, int flags) ++{ ++ int force = 0; ++ char *file = arg; ++ ++ /* If the option `--force' is specified? */ ++ if (substring ("--force", arg) <= 0) ++ { ++ force = 1; ++ file = skip_to (0, arg); ++ } ++ ++ /* Open the file. */ ++ if (! grub_open (file)) ++ { ++ kernel_type = KERNEL_TYPE_NONE; ++ return 1; ++ } ++ ++ /* Read the first block. */ ++ if (grub_read ((char *) BOOTSEC_LOCATION, SECTOR_SIZE) != SECTOR_SIZE) ++ { ++ grub_close (); ++ kernel_type = KERNEL_TYPE_NONE; ++ ++ /* This below happens, if a file whose size is less than 512 bytes ++ is loaded. */ ++ if (errnum == ERR_NONE) ++ errnum = ERR_EXEC_FORMAT; ++ ++ return 1; ++ } ++ ++ /* If not loading it forcibly, check for the signature. */ ++ if (! force ++ && (*((unsigned short *) (BOOTSEC_LOCATION + BOOTSEC_SIG_OFFSET)) ++ != BOOTSEC_SIGNATURE)) ++ { ++ grub_close (); ++ errnum = ERR_EXEC_FORMAT; ++ kernel_type = KERNEL_TYPE_NONE; ++ return 1; ++ } ++ ++ grub_close (); ++ kernel_type = KERNEL_TYPE_CHAINLOADER; ++ ++ /* XXX: Windows evil hack. For now, only the first five letters are ++ checked. */ ++ if (IS_PC_SLICE_TYPE_FAT (current_slice) ++ && ! grub_memcmp ((char *) BOOTSEC_LOCATION + BOOTSEC_BPB_SYSTEM_ID, ++ "MSWIN", 5)) ++ *((unsigned long *) (BOOTSEC_LOCATION + BOOTSEC_BPB_HIDDEN_SECTORS)) ++ = part_start; ++ ++ errnum = ERR_NONE; ++ ++ return 0; ++} ++ ++static struct builtin builtin_chainloader = ++{ ++ "chainloader", ++ chainloader_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "chainloader [--force] FILE", ++ "Load the chain-loader FILE. If --force is specified, then load it" ++ " forcibly, whether the boot loader signature is present or not." ++}; ++ ++ ++/* This function could be used to debug new filesystem code. Put a file ++ in the new filesystem and the same file in a well-tested filesystem. ++ Then, run "cmp" with the files. If no output is obtained, probably ++ the code is good, otherwise investigate what's wrong... */ ++/* cmp FILE1 FILE2 */ ++static int ++cmp_func (char *arg, int flags) ++{ ++ /* The filenames. */ ++ char *file1, *file2; ++ /* The addresses. */ ++ char *addr1, *addr2; ++ int i; ++ /* The size of the file. */ ++ int size; ++ ++ /* Get the filenames from ARG. */ ++ file1 = arg; ++ file2 = skip_to (0, arg); ++ if (! *file1 || ! *file2) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* Terminate the filenames for convenience. */ ++ nul_terminate (file1); ++ nul_terminate (file2); ++ ++ /* Read the whole data from FILE1. */ ++ addr1 = (char *) RAW_ADDR (0x100000); ++ if (! grub_open (file1)) ++ return 1; ++ ++ /* Get the size. */ ++ size = filemax; ++ if (grub_read (addr1, -1) != size) ++ { ++ grub_close (); ++ return 1; ++ } ++ ++ grub_close (); ++ ++ /* Read the whole data from FILE2. */ ++ addr2 = addr1 + size; ++ if (! grub_open (file2)) ++ return 1; ++ ++ /* Check if the size of FILE2 is equal to the one of FILE2. */ ++ if (size != filemax) ++ { ++ grub_printf ("Differ in size: 0x%x [%s], 0x%x [%s]\n", ++ size, file1, filemax, file2); ++ grub_close (); ++ return 0; ++ } ++ ++ if (! grub_read (addr2, -1)) ++ { ++ grub_close (); ++ return 1; ++ } ++ ++ grub_close (); ++ ++ /* Now compare ADDR1 with ADDR2. */ ++ for (i = 0; i < size; i++) ++ { ++ if (addr1[i] != addr2[i]) ++ grub_printf ("Differ at the offset %d: 0x%x [%s], 0x%x [%s]\n", ++ i, (unsigned) addr1[i], file1, ++ (unsigned) addr2[i], file2); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_cmp = ++{ ++ "cmp", ++ cmp_func, ++ BUILTIN_CMDLINE, ++ "cmp FILE1 FILE2", ++ "Compare the file FILE1 with the FILE2 and inform the different values" ++ " if any." ++}; ++ ++ ++/* color */ ++/* 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" ++ }; ++ ++ auto int color_number (char *str); ++ ++ /* 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++) ++ ; ++ ++ /* If not found, return -1. */ ++ if (! *ptr) ++ return -1; ++ ++ /* 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 (i == 16) ++ return -1; ++ ++ 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; ++ } ++ ++ if (i == 8) ++ return -1; ++ ++ return color; ++ } ++ ++ normal = arg; ++ highlight = skip_to (0, arg); ++ ++ new_normal_color = color_number (normal); ++ if (new_normal_color < 0 && ! safe_parse_maxint (&normal, &new_normal_color)) ++ return 1; ++ ++ /* The second argument is optional, so set highlight_color ++ to inverted NORMAL_COLOR. */ ++ if (! *highlight) ++ new_highlight_color = ((new_normal_color >> 4) ++ | ((new_normal_color & 0xf) << 4)); ++ else ++ { ++ new_highlight_color = color_number (highlight); ++ if (new_highlight_color < 0 ++ && ! safe_parse_maxint (&highlight, &new_highlight_color)) ++ return 1; ++ } ++ ++ if (current_term->setcolor) ++ current_term->setcolor (new_normal_color, new_highlight_color); ++ ++ return 0; ++} ++ ++static struct builtin builtin_color = ++{ ++ "color", ++ color_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "color NORMAL [HIGHLIGHT]", ++ "Change the menu colors. The color NORMAL is used for most" ++ " lines in the menu, and the color HIGHLIGHT is used to highlight the" ++ " line where the cursor points. If you omit HIGHLIGHT, then the" ++ " inverted color of NORMAL is used for the highlighted line." ++ " The format of a color is \"FG/BG\". FG and BG are symbolic color names." ++ " A symbolic color name must be one of these: black, blue, green," ++ " cyan, red, magenta, brown, light-gray, dark-gray, light-blue," ++ " light-green, light-cyan, light-red, light-magenta, yellow and white." ++ " 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 ++configfile_func (char *arg, int flags) ++{ ++ char *new_config = config_file; ++ ++ /* Check if the file ARG is present. */ ++ if (! grub_open (arg)) ++ return 1; ++ ++ grub_close (); ++ ++ /* Copy ARG to CONFIG_FILE. */ ++ while ((*new_config++ = *arg++) != 0) ++ ; ++ ++#ifdef GRUB_UTIL ++ /* Force to load the configuration file. */ ++ use_config_file = 1; ++#endif ++ ++ /* Make sure that the user will not be authoritative. */ ++ auth = 0; ++ ++ /* Restart cmain. */ ++ grub_longjmp (restart_env, 0); ++ ++ /* Never reach here. */ ++ return 0; ++} ++ ++static struct builtin builtin_configfile = ++{ ++ "configfile", ++ configfile_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "configfile FILE", ++ "Load FILE as the configuration file." ++}; ++ ++ ++/* debug */ ++static int ++debug_func (char *arg, int flags) ++{ ++ if (debug) ++ { ++ debug = 0; ++ grub_printf (" Debug mode is turned off\n"); ++ } ++ else ++ { ++ debug = 1; ++ grub_printf (" Debug mode is turned on\n"); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_debug = ++{ ++ "debug", ++ debug_func, ++ BUILTIN_CMDLINE, ++ "debug", ++ "Turn on/off the debug mode." ++}; ++ ++ ++/* default */ ++static int ++default_func (char *arg, int flags) ++{ ++#ifndef SUPPORT_DISKLESS ++ if (grub_strcmp (arg, "saved") == 0) ++ { ++ default_entry = saved_entryno; ++ return 0; ++ } ++#endif /* SUPPORT_DISKLESS */ ++ ++ if (! safe_parse_maxint (&arg, &default_entry)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_default = ++{ ++ "default", ++ default_func, ++ BUILTIN_MENU, ++#if 0 ++ "default [NUM | `saved']", ++ "Set the default entry to entry number NUM (if not specified, it is" ++ " 0, the first entry) or the entry number saved by savedefault." ++#endif ++}; ++ ++ ++#ifdef GRUB_UTIL ++/* device */ ++static int ++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); ++ ++ /* Terminate DEVICE. */ ++ nul_terminate (device); ++ ++ if (! *device || ! check_device (device)) ++ { ++ errnum = ERR_FILE_NOT_FOUND; ++ return 1; ++ } ++ ++ assign_device_name (current_drive, device); ++ ++ return 0; ++} ++ ++static struct builtin builtin_device = ++{ ++ "device", ++ device_func, ++ 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." ++}; ++#endif /* GRUB_UTIL */ ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* dhcp */ ++static int ++dhcp_func (char *arg, int flags) ++{ ++ /* For now, this is an alias for bootp. */ ++ return bootp_func (arg, flags); ++} ++ ++static struct builtin builtin_dhcp = ++{ ++ "dhcp", ++ dhcp_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "dhcp", ++ "Initialize a network device via DHCP." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++/* displayapm */ ++static int ++displayapm_func (char *arg, int flags) ++{ ++ if (mbi.flags & MB_INFO_APM_TABLE) ++ { ++ grub_printf ("APM BIOS information:\n" ++ " Version: 0x%x\n" ++ " 32-bit CS: 0x%x\n" ++ " Offset: 0x%x\n" ++ " 16-bit CS: 0x%x\n" ++ " 16-bit DS: 0x%x\n" ++ " 32-bit CS length: 0x%x\n" ++ " 16-bit CS length: 0x%x\n" ++ " 16-bit DS length: 0x%x\n", ++ (unsigned) apm_bios_info.version, ++ (unsigned) apm_bios_info.cseg, ++ apm_bios_info.offset, ++ (unsigned) apm_bios_info.cseg_16, ++ (unsigned) apm_bios_info.dseg_16, ++ (unsigned) apm_bios_info.cseg_len, ++ (unsigned) apm_bios_info.cseg_16_len, ++ (unsigned) apm_bios_info.dseg_16_len); ++ } ++ else ++ { ++ grub_printf ("No APM BIOS found or probe failed\n"); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_displayapm = ++{ ++ "displayapm", ++ displayapm_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "displayapm", ++ "Display APM BIOS information." ++}; ++ ++ ++/* displaymem */ ++static int ++displaymem_func (char *arg, int flags) ++{ ++ if (get_eisamemsize () != -1) ++ grub_printf (" EISA Memory BIOS Interface is present\n"); ++ if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0 ++ || *((int *) SCRATCHADDR) != 0) ++ grub_printf (" Address Map BIOS Interface is present\n"); ++ ++ grub_printf (" Lower memory: %uK, " ++ "Upper memory (to first chipset hole): %uK\n", ++ mbi.mem_lower, mbi.mem_upper); ++ ++ if (mbi.flags & MB_INFO_MEM_MAP) ++ { ++ struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr; ++ int 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) ++ { ++ char *str; ++ ++ if (map->Type == MB_ARD_MEMORY) ++ 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)); ++ } ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_displaymem = ++{ ++ "displaymem", ++ displaymem_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "displaymem", ++ "Display what GRUB thinks the system address space map of the" ++ " machine is, including all regions of physical RAM installed." ++}; ++ ++ ++/* dump FROM TO */ ++#ifdef GRUB_UTIL ++static int ++dump_func (char *arg, int flags) ++{ ++ char *from, *to; ++ FILE *fp; ++ char c; ++ ++ from = arg; ++ to = skip_to (0, arg); ++ if (! *from || ! *to) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ nul_terminate (from); ++ nul_terminate (to); ++ ++ if (! grub_open (from)) ++ return 1; ++ ++ fp = fopen (to, "w"); ++ if (! fp) ++ { ++ errnum = ERR_WRITE; ++ return 1; ++ } ++ ++ while (grub_read (&c, 1)) ++ if (fputc (c, fp) == EOF) ++ { ++ errnum = ERR_WRITE; ++ fclose (fp); ++ return 1; ++ } ++ ++ if (fclose (fp) == EOF) ++ { ++ errnum = ERR_WRITE; ++ return 1; ++ } ++ ++ grub_close (); ++ return 0; ++} ++ ++static struct builtin builtin_dump = ++ { ++ "dump", ++ dump_func, ++ BUILTIN_CMDLINE, ++ "dump FROM TO", ++ "Dump the contents of the file FROM to the file TO. FROM must be" ++ " a GRUB file and TO must be an OS file." ++ }; ++#endif /* GRUB_UTIL */ ++ ++ ++static char embed_info[32]; ++/* embed */ ++/* Embed a Stage 1.5 in the first cylinder after MBR or in the ++ bootloader block in a FFS. */ ++static int ++embed_func (char *arg, int flags) ++{ ++ char *stage1_5; ++ char *device; ++ char *stage1_5_buffer = (char *) RAW_ADDR (0x100000); ++ int len, size; ++ int sector; ++ ++ stage1_5 = arg; ++ device = skip_to (0, stage1_5); ++ ++ /* Open a Stage 1.5. */ ++ if (! grub_open (stage1_5)) ++ return 1; ++ ++ /* Read the whole of the Stage 1.5. */ ++ len = grub_read (stage1_5_buffer, -1); ++ grub_close (); ++ ++ if (errnum) ++ return 1; ++ ++ size = (len + SECTOR_SIZE - 1) / SECTOR_SIZE; ++ ++ /* Get the device where the Stage 1.5 will be embedded. */ ++ set_device (device); ++ if (errnum) ++ return 1; ++ ++ if (current_partition == 0xFFFFFF) ++ { ++ /* Embed it after the MBR. */ ++ ++ char mbr[SECTOR_SIZE]; ++ char ezbios_check[2*SECTOR_SIZE]; ++ int i; ++ ++ /* Open the partition. */ ++ if (! open_partition ()) ++ return 1; ++ ++ /* No floppy has MBR. */ ++ if (! (current_drive & 0x80)) ++ { ++ errnum = ERR_DEV_VALUES; ++ return 1; ++ } ++ ++ /* Read the MBR of CURRENT_DRIVE. */ ++ if (! rawread (current_drive, PC_MBR_SECTOR, 0, SECTOR_SIZE, mbr)) ++ return 1; ++ ++ /* Sanity check. */ ++ if (! PC_MBR_CHECK_SIG (mbr)) ++ { ++ errnum = ERR_BAD_PART_TABLE; ++ return 1; ++ } ++ ++ /* Check if the disk can store the Stage 1.5. */ ++ for (i = 0; i < 4; i++) ++ if (PC_SLICE_TYPE (mbr, i) && PC_SLICE_START (mbr, i) - 1 < size) ++ { ++ errnum = ERR_NO_DISK_SPACE; ++ return 1; ++ } ++ ++ /* Check for EZ-BIOS signature. It should be in the third ++ * sector, but due to remapping it can appear in the second, so ++ * load and check both. ++ */ ++ if (! rawread (current_drive, 1, 0, 2 * SECTOR_SIZE, ezbios_check)) ++ return 1; ++ ++ if (! memcmp (ezbios_check + 3, "AERMH", 5) ++ || ! memcmp (ezbios_check + 512 + 3, "AERMH", 5)) ++ { ++ /* The space after the MBR is used by EZ-BIOS which we must ++ * not overwrite. ++ */ ++ errnum = ERR_NO_DISK_SPACE; ++ return 1; ++ } ++ ++ sector = 1; ++ } ++ else ++ { ++ /* Embed it in the bootloader block in the filesystem. */ ++ int start_sector; ++ ++ /* Open the partition. */ ++ if (! open_device ()) ++ return 1; ++ ++ /* Check if the current slice supports embedding. */ ++ if (fsys_table[fsys_type].embed_func == 0 ++ || ! fsys_table[fsys_type].embed_func (&start_sector, size)) ++ { ++ errnum = ERR_DEV_VALUES; ++ return 1; ++ } ++ ++ sector = part_start + start_sector; ++ } ++ ++ /* Clear the cache. */ ++ buf_track = -1; ++ ++ /* Now perform the embedding. */ ++ if (! devwrite (sector - part_start, size, stage1_5_buffer)) ++ return 1; ++ ++ grub_printf (" %d sectors are embedded.\n", size); ++ grub_sprintf (embed_info, "%d+%d", sector - part_start, size); ++ return 0; ++} ++ ++static struct builtin builtin_embed = ++{ ++ "embed", ++ embed_func, ++ BUILTIN_CMDLINE, ++ "embed STAGE1_5 DEVICE", ++ "Embed the Stage 1.5 STAGE1_5 in the sectors after MBR if DEVICE" ++ " 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." ++}; ++ ++ ++/* fallback */ ++static int ++fallback_func (char *arg, int flags) ++{ ++ int i = 0; ++ ++ while (*arg) ++ { ++ int entry; ++ int j; ++ ++ if (! safe_parse_maxint (&arg, &entry)) ++ return 1; ++ ++ /* Remove duplications to prevent infinite looping. */ ++ for (j = 0; j < i; j++) ++ if (entry == fallback_entries[j]) ++ break; ++ if (j != i) ++ continue; ++ ++ fallback_entries[i++] = entry; ++ if (i == MAX_FALLBACK_ENTRIES) ++ break; ++ ++ arg = skip_to (0, arg); ++ } ++ ++ if (i < MAX_FALLBACK_ENTRIES) ++ fallback_entries[i] = -1; ++ ++ fallback_entryno = (i == 0) ? -1 : 0; ++ ++ return 0; ++} ++ ++static struct builtin builtin_fallback = ++{ ++ "fallback", ++ fallback_func, ++ BUILTIN_MENU, ++#if 0 ++ "fallback NUM...", ++ "Go into unattended boot mode: if the default boot entry has any" ++ " errors, instead of waiting for the user to do anything, it" ++ " immediately starts over using the NUM entry (same numbering as the" ++ " `default' command). This obviously won't help if the machine" ++ " was rebooted by a kernel that GRUB loaded." ++#endif ++}; ++ ++ ++/* find */ ++/* Search for the filename ARG in all of partitions. */ ++static int ++find_func (char *arg, int flags) ++{ ++ char *filename = arg; ++ unsigned long drive; ++ unsigned long tmp_drive = saved_drive; ++ unsigned long tmp_partition = saved_partition; ++ int got_file = 0; ++ ++ /* Floppies. */ ++ for (drive = 0; drive < 8; drive++) ++ { ++ current_drive = drive; ++ current_partition = 0xFFFFFF; ++ ++ if (open_device ()) ++ { ++ saved_drive = current_drive; ++ saved_partition = current_partition; ++ if (grub_open (filename)) ++ { ++ grub_close (); ++ grub_printf (" (fd%d)\n", drive); ++ got_file = 1; ++ } ++ } ++ ++ errnum = ERR_NONE; ++ } ++ ++ /* Hard disks. */ ++ for (drive = 0x80; drive < 0x88; drive++) ++ { ++ unsigned long part = 0xFFFFFF; ++ unsigned long start, len, offset, ext_offset; ++ int type, entry; ++ char buf[SECTOR_SIZE]; ++ ++ current_drive = drive; ++ while (next_partition (drive, 0xFFFFFF, &part, &type, ++ &start, &len, &offset, &entry, ++ &ext_offset, buf)) ++ { ++ if (type != PC_SLICE_TYPE_NONE ++ && ! IS_PC_SLICE_TYPE_BSD (type) ++ && ! IS_PC_SLICE_TYPE_EXTENDED (type)) ++ { ++ current_partition = part; ++ if (open_device ()) ++ { ++ saved_drive = current_drive; ++ saved_partition = current_partition; ++ if (grub_open (filename)) ++ { ++ int bsd_part = (part >> 8) & 0xFF; ++ int pc_slice = part >> 16; ++ ++ grub_close (); ++ ++ if (bsd_part == 0xFF) ++ grub_printf (" (hd%d,%d)\n", ++ drive - 0x80, pc_slice); ++ else ++ grub_printf (" (hd%d,%d,%c)\n", ++ drive - 0x80, pc_slice, bsd_part + 'a'); ++ ++ got_file = 1; ++ } ++ } ++ } ++ ++ /* We want to ignore any error here. */ ++ errnum = ERR_NONE; ++ } ++ ++ /* next_partition always sets ERRNUM in the last call, so clear ++ it. */ ++ errnum = ERR_NONE; ++ } ++ ++ saved_drive = tmp_drive; ++ saved_partition = tmp_partition; ++ ++ if (got_file) ++ { ++ errnum = ERR_NONE; ++ return 0; ++ } ++ ++ errnum = ERR_FILE_NOT_FOUND; ++ return 1; ++} ++ ++static struct builtin builtin_find = ++{ ++ "find", ++ find_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "find FILENAME", ++ "Search for the filename FILENAME in all of partitions and print the list of" ++ " the devices which contain the file." ++}; ++ ++ ++/* fstest */ ++static int ++fstest_func (char *arg, int flags) ++{ ++ if (disk_read_hook) ++ { ++ disk_read_hook = NULL; ++ printf (" Filesystem tracing is now off\n"); ++ } ++ else ++ { ++ disk_read_hook = disk_read_print_func; ++ printf (" Filesystem tracing is now on\n"); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_fstest = ++{ ++ "fstest", ++ fstest_func, ++ BUILTIN_CMDLINE, ++ "fstest", ++ "Toggle filesystem test mode." ++}; ++ ++ ++/* geometry */ ++static int ++geometry_func (char *arg, int flags) ++{ ++ struct geometry geom; ++ char *msg; ++ char *device = arg; ++#ifdef GRUB_UTIL ++ char *ptr; ++#endif ++ ++ /* Get the device number. */ ++ set_device (device); ++ if (errnum) ++ return 1; ++ ++ /* Check for the geometry. */ ++ if (get_diskinfo (current_drive, &geom)) ++ { ++ errnum = ERR_NO_DISK; ++ return 1; ++ } ++ ++ /* Attempt to read the first sector, because some BIOSes turns out not ++ to support LBA even though they set the bit 0 in the support ++ bitmap, only after reading something actually. */ ++ if (biosdisk (BIOSDISK_READ, current_drive, &geom, 0, 1, SCRATCHSEG)) ++ { ++ errnum = ERR_READ; ++ return 1; ++ } ++ ++#ifdef GRUB_UTIL ++ ptr = skip_to (0, device); ++ if (*ptr) ++ { ++ char *cylinder, *head, *sector, *total_sector; ++ int num_cylinder, num_head, num_sector, num_total_sector; ++ ++ cylinder = ptr; ++ head = skip_to (0, cylinder); ++ sector = skip_to (0, head); ++ total_sector = skip_to (0, sector); ++ if (! safe_parse_maxint (&cylinder, &num_cylinder) ++ || ! safe_parse_maxint (&head, &num_head) ++ || ! safe_parse_maxint (§or, &num_sector)) ++ return 1; ++ ++ disks[current_drive].cylinders = num_cylinder; ++ disks[current_drive].heads = num_head; ++ disks[current_drive].sectors = num_sector; ++ ++ if (safe_parse_maxint (&total_sector, &num_total_sector)) ++ disks[current_drive].total_sectors = num_total_sector; ++ else ++ disks[current_drive].total_sectors ++ = num_cylinder * num_head * num_sector; ++ errnum = 0; ++ ++ geom = disks[current_drive]; ++ buf_drive = -1; ++ } ++#endif /* GRUB_UTIL */ ++ ++#ifdef GRUB_UTIL ++ msg = device_map[current_drive]; ++#else ++ if (geom.flags & BIOSDISK_FLAG_LBA_EXTENSION) ++ msg = "LBA"; ++ else ++ msg = "CHS"; ++#endif ++ ++ grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, " ++ "The number of sectors = %d, %s\n", ++ current_drive, ++ geom.cylinders, geom.heads, geom.sectors, ++ geom.total_sectors, msg); ++ real_open_partition (1); ++ ++ return 0; ++} ++ ++static struct builtin builtin_geometry = ++{ ++ "geometry", ++ geometry_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]", ++ "Print the information for a drive DRIVE. In the grub shell, you can" ++ " set the geometry of the drive arbitrarily. The number of the cylinders," ++ " the one of the heads, the one of the sectors and the one of the total" ++ " sectors are set to CYLINDER, HEAD, SECTOR and TOTAL_SECTOR," ++ " respectively. If you omit TOTAL_SECTOR, then it will be calculated based" ++ " on the C/H/S values automatically." ++}; ++ ++ ++/* halt */ ++static int ++halt_func (char *arg, int flags) ++{ ++ int no_apm; ++ ++ no_apm = (grub_memcmp (arg, "--no-apm", 8) == 0); ++ grub_halt (no_apm); ++ ++ /* Never reach here. */ ++ return 1; ++} ++ ++static struct builtin builtin_halt = ++{ ++ "halt", ++ halt_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "halt [--no-apm]", ++ "Halt your system. If APM is avaiable on it, turn off the power using" ++ " the APM BIOS, unless you specify the option `--no-apm'." ++}; ++ ++ ++/* help */ ++#define MAX_SHORT_DOC_LEN 39 ++#define MAX_LONG_DOC_LEN 66 ++ ++static int ++help_func (char *arg, int flags) ++{ ++ int all = 0; ++ ++ if (grub_memcmp (arg, "--all", sizeof ("--all") - 1) == 0) ++ { ++ all = 1; ++ arg = skip_to (0, arg); ++ } ++ ++ if (! *arg) ++ { ++ /* Invoked with no argument. Print the list of the short docs. */ ++ struct builtin **builtin; ++ int left = 1; ++ ++ for (builtin = builtin_table; *builtin != 0; builtin++) ++ { ++ int len; ++ int i; ++ ++ /* If this cannot be used in the command-line interface, ++ skip this. */ ++ if (! ((*builtin)->flags & BUILTIN_CMDLINE)) ++ continue; ++ ++ /* If this doesn't need to be listed automatically and "--all" ++ is not specified, skip this. */ ++ if (! all && ! ((*builtin)->flags & BUILTIN_HELP_LIST)) ++ continue; ++ ++ len = grub_strlen ((*builtin)->short_doc); ++ /* If the length of SHORT_DOC is too long, truncate it. */ ++ if (len > MAX_SHORT_DOC_LEN - 1) ++ len = MAX_SHORT_DOC_LEN - 1; ++ ++ for (i = 0; i < len; i++) ++ grub_putchar ((*builtin)->short_doc[i]); ++ ++ for (; i < MAX_SHORT_DOC_LEN; i++) ++ grub_putchar (' '); ++ ++ if (! left) ++ grub_putchar ('\n'); ++ ++ left = ! left; ++ } ++ ++ /* If the last entry was at the left column, no newline was printed ++ at the end. */ ++ if (! left) ++ grub_putchar ('\n'); ++ } ++ else ++ { ++ /* Invoked with one or more patterns. */ ++ do ++ { ++ struct builtin **builtin; ++ char *next_arg; ++ ++ /* Get the next argument. */ ++ next_arg = skip_to (0, arg); ++ ++ /* Terminate ARG. */ ++ nul_terminate (arg); ++ ++ for (builtin = builtin_table; *builtin; builtin++) ++ { ++ /* Skip this if this is only for the configuration file. */ ++ if (! ((*builtin)->flags & BUILTIN_CMDLINE)) ++ continue; ++ ++ if (substring (arg, (*builtin)->name) < 1) ++ { ++ char *doc = (*builtin)->long_doc; ++ ++ /* At first, print the name and the short doc. */ ++ grub_printf ("%s: %s\n", ++ (*builtin)->name, (*builtin)->short_doc); ++ ++ /* Print the long doc. */ ++ while (*doc) ++ { ++ int len = grub_strlen (doc); ++ int i; ++ ++ /* If LEN is too long, fold DOC. */ ++ if (len > MAX_LONG_DOC_LEN) ++ { ++ /* Fold this line at the position of a space. */ ++ for (len = MAX_LONG_DOC_LEN; len > 0; len--) ++ if (doc[len - 1] == ' ') ++ break; ++ } ++ ++ grub_printf (" "); ++ for (i = 0; i < len; i++) ++ grub_putchar (*doc++); ++ grub_putchar ('\n'); ++ } ++ } ++ } ++ ++ arg = next_arg; ++ } ++ while (*arg); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_help = ++{ ++ "help", ++ help_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "help [--all] [PATTERN ...]", ++ "Display helpful information about builtin commands. Not all commands" ++ " aren't shown without the option `--all'." ++}; ++ ++ ++/* hiddenmenu */ ++static int ++hiddenmenu_func (char *arg, int flags) ++{ ++ show_menu = 0; ++ return 0; ++} ++ ++static struct builtin builtin_hiddenmenu = ++{ ++ "hiddenmenu", ++ hiddenmenu_func, ++ BUILTIN_MENU, ++#if 0 ++ "hiddenmenu", ++ "Hide the menu." ++#endif ++}; ++ ++ ++/* hide */ ++static int ++hide_func (char *arg, int flags) ++{ ++ if (! set_device (arg)) ++ return 1; ++ ++ if (! set_partition_hidden_flag (1)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_hide = ++{ ++ "hide", ++ hide_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "hide PARTITION", ++ "Hide PARTITION by setting the \"hidden\" bit in" ++ " its partition type code." ++}; ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* ifconfig */ ++static int ++ifconfig_func (char *arg, int flags) ++{ ++ char *svr = 0, *ip = 0, *gw = 0, *sm = 0; ++ ++ if (! eth_probe ()) ++ { ++ grub_printf ("No ethernet card found.\n"); ++ errnum = ERR_DEV_VALUES; ++ return 1; ++ } ++ ++ while (*arg) ++ { ++ if (! grub_memcmp ("--server=", arg, sizeof ("--server=") - 1)) ++ svr = arg + sizeof("--server=") - 1; ++ else if (! grub_memcmp ("--address=", arg, sizeof ("--address=") - 1)) ++ ip = arg + sizeof ("--address=") - 1; ++ else if (! grub_memcmp ("--gateway=", arg, sizeof ("--gateway=") - 1)) ++ gw = arg + sizeof ("--gateway=") - 1; ++ else if (! grub_memcmp ("--mask=", arg, sizeof("--mask=") - 1)) ++ sm = arg + sizeof ("--mask=") - 1; ++ else ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ arg = skip_to (0, arg); ++ } ++ ++ if (! ifconfig (ip, sm, gw, svr)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ print_network_configuration (); ++ return 0; ++} ++ ++static struct builtin builtin_ifconfig = ++{ ++ "ifconfig", ++ ifconfig_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]", ++ "Configure the IP address, the netmask, the gateway and the server" ++ " address or print current network configuration." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++/* impsprobe */ ++static int ++impsprobe_func (char *arg, int flags) ++{ ++#ifdef GRUB_UTIL ++ /* In the grub shell, we cannot probe IMPS. */ ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++#else /* ! GRUB_UTIL */ ++ if (!imps_probe ()) ++ printf (" No MPS information found or probe failed\n"); ++ ++ return 0; ++#endif /* ! GRUB_UTIL */ ++} ++ ++static struct builtin builtin_impsprobe = ++{ ++ "impsprobe", ++ impsprobe_func, ++ BUILTIN_CMDLINE, ++ "impsprobe", ++ "Probe the Intel Multiprocessor Specification 1.1 or 1.4" ++ " configuration table and boot the various CPUs which are found into" ++ " a tight loop." ++}; ++ ++ ++/* initrd */ ++static int ++initrd_func (char *arg, int flags) ++{ ++ switch (kernel_type) ++ { ++ case KERNEL_TYPE_LINUX: ++ case KERNEL_TYPE_BIG_LINUX: ++ if (! load_initrd (arg)) ++ return 1; ++ break; ++ ++ default: ++ errnum = ERR_NEED_LX_KERNEL; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_initrd = ++{ ++ "initrd", ++ initrd_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "initrd FILE [ARG ...]", ++ "Load an initial ramdisk FILE for a Linux format boot image and set the" ++ " appropriate parameters in the Linux setup area in memory." ++}; ++ ++ ++/* install */ ++static int ++install_func (char *arg, int flags) ++{ ++ char *stage1_file, *dest_dev, *file, *addr; ++ 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; ++ /* XXX: Probably SECTOR_SIZE is reasonable. */ ++ char *config_filename = stage2_second_buffer + SECTOR_SIZE; ++ char *dummy = config_filename + SECTOR_SIZE; ++ int new_drive = GRUB_INVALID_DRIVE; ++ int dest_drive, dest_partition, dest_sector; ++ int src_drive, src_partition, src_part_start; ++ int i; ++ struct geometry dest_geom, src_geom; ++ int saved_sector; ++ int stage2_first_sector, stage2_second_sector; ++ char *ptr; ++ int installaddr, 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? */ ++ int is_stage1_5 = 0; ++ /* Must call grub_close? */ ++ int is_open = 0; ++ /* If LBA is forced? */ ++ int is_force_lba = 0; ++ /* Was the last sector full? */ ++ int last_length = 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) ++ { ++ if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0) ++ { ++ is_force_lba = 1; ++ arg = skip_to (0, arg); ++ } ++#ifdef GRUB_UTIL ++ else 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); ++ } ++#endif /* GRUB_UTIL */ ++ else ++ break; ++ } ++ ++ stage1_file = arg; ++ dest_dev = skip_to (0, stage1_file); ++ if (*dest_dev == 'd') ++ { ++ new_drive = 0; ++ dest_dev = skip_to (0, dest_dev); ++ } ++ file = skip_to (0, dest_dev); ++ addr = skip_to (0, file); ++ ++ /* Get the installation address. */ ++ if (! safe_parse_maxint (&addr, &installaddr)) ++ { ++ /* ADDR is not specified. */ ++ installaddr = 0; ++ ptr = addr; ++ errnum = 0; ++ } ++ else ++ ptr = skip_to (0, addr); ++ ++#ifndef NO_DECOMPRESSION ++ /* Do not decompress Stage 1 or Stage 2. */ ++ no_decompression = 1; ++#endif ++ ++ /* Read Stage 1. */ ++ is_open = grub_open (stage1_file); ++ if (! is_open ++ || ! grub_read (stage1_buffer, SECTOR_SIZE) == SECTOR_SIZE) ++ goto fail; ++ ++ /* Read the old sector from DEST_DEV. */ ++ if (! set_device (dest_dev) ++ || ! open_partition () ++ || ! devread (0, 0, SECTOR_SIZE, old_sect)) ++ goto fail; ++ ++ /* Store the information for the destination device. */ ++ dest_drive = current_drive; ++ dest_partition = current_partition; ++ dest_geom = buf_geom; ++ dest_sector = part_start; ++ ++ /* Copy the possible DOS BPB, 59 bytes at byte offset 3. */ ++ grub_memmove (stage1_buffer + BOOTSEC_BPB_OFFSET, ++ old_sect + BOOTSEC_BPB_OFFSET, ++ BOOTSEC_BPB_LENGTH); ++ ++ /* If for a hard disk, copy the possible MBR/extended part table. */ ++ if (dest_drive & 0x80) ++ grub_memmove (stage1_buffer + STAGE1_WINDOWS_NT_MAGIC, ++ old_sect + STAGE1_WINDOWS_NT_MAGIC, ++ STAGE1_PARTEND - STAGE1_WINDOWS_NT_MAGIC); ++ ++ /* Check for the version and the signature of Stage 1. */ ++ if (*((short *)(stage1_buffer + STAGE1_VER_MAJ_OFFS)) != COMPAT_VERSION ++ || (*((unsigned short *) (stage1_buffer + BOOTSEC_SIG_OFFSET)) ++ != BOOTSEC_SIGNATURE)) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ /* This below is not true any longer. But should we leave this alone? */ ++ ++ /* If DEST_DRIVE is a floppy, Stage 2 must have the iteration probe ++ routine. */ ++ if (! (dest_drive & 0x80) ++ && (*((unsigned char *) (stage1_buffer + BOOTSEC_PART_OFFSET)) == 0x80 ++ || stage1_buffer[BOOTSEC_PART_OFFSET] == 0)) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ grub_close (); ++ ++ /* Open Stage 2. */ ++ is_open = grub_open (file); ++ if (! is_open) ++ goto fail; ++ ++ src_drive = current_drive; ++ src_partition = current_partition; ++ src_part_start = part_start; ++ src_geom = buf_geom; ++ ++ if (! new_drive) ++ new_drive = src_drive; ++ else if (src_drive != dest_drive) ++ grub_printf ("Warning: the option `d' was not used, but the Stage 1 will" ++ " be installed on a\ndifferent drive than the drive where" ++ " the Stage 2 resides.\n"); ++ ++ /* Set the boot drive. */ ++ *((unsigned char *) (stage1_buffer + STAGE1_BOOT_DRIVE)) = new_drive; ++ ++ /* Set the "force LBA" flag. */ ++ *((unsigned char *) (stage1_buffer + STAGE1_FORCE_LBA)) = is_force_lba; ++ ++ /* If DEST_DRIVE is a hard disk, enable the workaround, which is ++ for buggy BIOSes which don't pass boot drive correctly. Instead, ++ they pass 0x00 or 0x01 even when booted from 0x80. */ ++ if (dest_drive & BIOS_FLAG_FIXED_DISK) ++ /* Replace the jmp (2 bytes) with double nop's. */ ++ *((unsigned short *) (stage1_buffer + STAGE1_BOOT_DRIVE_CHECK)) ++ = 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) ++ goto fail; ++ ++ 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; ++ ++ /* Check for the version of Stage 2. */ ++ if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS)) ++ != COMPAT_VERSION) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ /* Check for the Stage 2 id. */ ++ if (stage2_second_buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2) ++ is_stage1_5 = 1; ++ ++ /* If INSTALLADDR is not specified explicitly in the command-line, ++ determine it by the Stage 2 id. */ ++ if (! installaddr) ++ { ++ if (! is_stage1_5) ++ /* Stage 2. */ ++ installaddr = 0x8000; ++ else ++ /* Stage 1.5. */ ++ installaddr = 0x2000; ++ } ++ ++ *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR)) ++ = stage2_first_sector; ++ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS)) ++ = installaddr; ++ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT)) ++ = installaddr >> 4; ++ ++ i = (int) stage2_first_buffer + SECTOR_SIZE - 4; ++ while (*((unsigned long *) i)) ++ { ++ if (i < (int) stage2_first_buffer ++ || (*((int *) (i - 4)) & 0x80000000) ++ || *((unsigned short *) i) >= 0xA00 ++ || *((short *) (i + 2)) == 0) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ *((int *) i) = 0; ++ *((int *) (i - 4)) = 0; ++ i -= 8; ++ } ++ ++ 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; ++ if (! grub_read (dummy, -1)) ++ goto fail; ++ ++ disk_read_hook = 0; ++ ++ /* Find a string for the configuration filename. */ ++ config_file_location = stage2_second_buffer + STAGE2_VER_STR_OFFS; ++ while (*(config_file_location++)) ++ ; ++ ++ /* Set the "force LBA" flag for Stage2. */ ++ *((unsigned char *) (stage2_second_buffer + STAGE2_FORCE_LBA)) ++ = is_force_lba; ++ ++ if (*ptr == 'p') ++ { ++ *((long *) (stage2_second_buffer + STAGE2_INSTALLPART)) ++ = src_partition; ++ if (is_stage1_5) ++ { ++ /* Reset the device information in FILE if it is a Stage 1.5. */ ++ unsigned long device = 0xFFFFFFFF; ++ ++ grub_memmove (config_file_location, (char *) &device, ++ sizeof (device)); ++ } ++ ++ ptr = skip_to (0, ptr); ++ } ++ ++ if (*ptr) ++ { ++ grub_strcpy (config_filename, ptr); ++ nul_terminate (config_filename); ++ ++ if (! is_stage1_5) ++ /* If it is a Stage 2, just copy PTR to CONFIG_FILE_LOCATION. */ ++ grub_strcpy (config_file_location, ptr); ++ else ++ { ++ char *real_config; ++ unsigned long device; ++ ++ /* Translate the external device syntax to the internal device ++ syntax. */ ++ if (! (real_config = set_device (ptr))) ++ { ++ /* The Stage 2 PTR does not contain the device name, so ++ use the root device instead. */ ++ errnum = ERR_NONE; ++ current_drive = saved_drive; ++ current_partition = saved_partition; ++ real_config = ptr; ++ } ++ ++ if (current_drive == src_drive) ++ { ++ /* If the drive where the Stage 2 resides is the same as ++ the one where the Stage 1.5 resides, do not embed the ++ drive number. */ ++ current_drive = GRUB_INVALID_DRIVE; ++ } ++ ++ device = (current_drive << 24) | current_partition; ++ grub_memmove (config_file_location, (char *) &device, ++ sizeof (device)); ++ grub_strcpy (config_file_location + sizeof (device), ++ real_config); ++ } ++ ++ /* If a Stage 1.5 is used, then we need to modify the Stage2. */ ++ if (is_stage1_5) ++ { ++ char *real_config_filename = skip_to (0, ptr); ++ ++ is_open = grub_open (config_filename); ++ if (! is_open) ++ goto fail; ++ ++ /* Skip the first sector. */ ++ grub_seek (SECTOR_SIZE); ++ ++ disk_read_hook = disk_read_savesect_func; ++ if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE) ++ goto fail; ++ ++ disk_read_hook = 0; ++ grub_close (); ++ is_open = 0; ++ ++ /* Sanity check. */ ++ if (*(stage2_buffer + STAGE2_STAGE2_ID) != STAGE2_ID_STAGE2) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ /* Set the "force LBA" flag for Stage2. */ ++ *(stage2_buffer + STAGE2_FORCE_LBA) = is_force_lba; ++ ++ /* If REAL_CONFIG_FILENAME is specified, copy it to the Stage2. */ ++ if (*real_config_filename) ++ { ++ /* Specified */ ++ char *location; ++ ++ /* Find a string for the configuration filename. */ ++ location = stage2_buffer + STAGE2_VER_STR_OFFS; ++ while (*(location++)) ++ ; ++ ++ /* Copy the name. */ ++ grub_strcpy (location, real_config_filename); ++ } ++ ++ /* Write it to the disk. */ ++ buf_track = -1; ++ ++#ifdef GRUB_UTIL ++ /* In the grub shell, access the Stage 2 via the OS filesystem ++ service, if possible. */ ++ if (stage2_os_file) ++ { ++ FILE *fp; ++ ++ fp = fopen (stage2_os_file, "r+"); ++ if (! fp) ++ { ++ errnum = ERR_FILE_NOT_FOUND; ++ goto fail; ++ } ++ ++ if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) ++ { ++ fclose (fp); ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ if (fwrite (stage2_buffer, 1, SECTOR_SIZE, fp) ++ != SECTOR_SIZE) ++ { ++ fclose (fp); ++ errnum = ERR_WRITE; ++ goto fail; ++ } ++ ++ fclose (fp); ++ } ++ else ++#endif /* GRUB_UTIL */ ++ { ++ if (! devwrite (saved_sector - part_start, 1, stage2_buffer)) ++ goto fail; ++ } ++ } ++ } ++ ++ /* Clear the cache. */ ++ buf_track = -1; ++ ++ /* Write the modified sectors of Stage2 to the disk. */ ++#ifdef GRUB_UTIL ++ if (! is_stage1_5 && stage2_os_file) ++ { ++ FILE *fp; ++ ++ fp = fopen (stage2_os_file, "r+"); ++ if (! fp) ++ { ++ errnum = ERR_FILE_NOT_FOUND; ++ goto fail; ++ } ++ ++ if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) ++ { ++ fclose (fp); ++ errnum = ERR_WRITE; ++ goto fail; ++ } ++ ++ if (fwrite (stage2_second_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) ++ { ++ fclose (fp); ++ errnum = ERR_WRITE; ++ goto fail; ++ } ++ ++ fclose (fp); ++ } ++ else ++#endif /* GRUB_UTIL */ ++ { ++ /* The first. */ ++ current_drive = src_drive; ++ current_partition = src_partition; ++ ++ if (! open_partition ()) ++ goto fail; ++ ++ if (! devwrite (stage2_first_sector - src_part_start, 1, ++ stage2_first_buffer)) ++ goto fail; ++ ++ if (! devwrite (stage2_second_sector - src_part_start, 1, ++ stage2_second_buffer)) ++ goto fail; ++ } ++ ++ /* Write the modified sector of Stage 1 to the disk. */ ++ current_drive = dest_drive; ++ current_partition = dest_partition; ++ if (! open_partition ()) ++ goto fail; ++ ++ devwrite (0, 1, stage1_buffer); ++ ++ fail: ++ if (is_open) ++ grub_close (); ++ ++ disk_read_hook = 0; ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 0; ++#endif ++ ++ return errnum; ++} ++ ++static struct builtin builtin_install = ++{ ++ "install", ++ install_func, ++ BUILTIN_CMDLINE, ++ "install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]", ++ "Install STAGE1 on DEVICE, and install a blocklist for loading STAGE2" ++ " as a Stage 2. If the option `d' is present, the Stage 1 will always" ++ " look for the disk where STAGE2 was installed, rather than using" ++ " the booting drive. The Stage 2 will be loaded at address ADDR, which" ++ " will be determined automatically if you don't specify it. If" ++ " the option `p' or CONFIG_FILE is present, then the first block" ++ " of Stage 2 is patched with new values of the partition and name" ++ " of the configuration file used by the true Stage 2 (for a Stage 1.5," ++ " this is the name of the true Stage 2) at boot time. If STAGE2 is a Stage" ++ " 1.5 and REAL_CONFIG_FILE is present, then the Stage 2 CONFIG_FILE is" ++ " patched with the configuration filename REAL_CONFIG_FILE." ++ " If the option `--force-lba' is specified, disable some sanity checks" ++ " for LBA mode. If the option `--stage2' is specified, rewrite the Stage" ++ " 2 via your OS's filesystem instead of the raw device." ++}; ++ ++ ++/* ioprobe */ ++static int ++ioprobe_func (char *arg, int flags) ++{ ++#ifdef GRUB_UTIL ++ ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++ ++#else /* ! GRUB_UTIL */ ++ ++ unsigned short *port; ++ ++ /* Get the drive number. */ ++ set_device (arg); ++ if (errnum) ++ return 1; ++ ++ /* Clean out IO_MAP. */ ++ grub_memset ((char *) io_map, 0, IO_MAP_SIZE * sizeof (unsigned short)); ++ ++ /* Track the int13 handler. */ ++ track_int13 (current_drive); ++ ++ /* Print out the result. */ ++ for (port = io_map; *port != 0; port++) ++ grub_printf (" 0x%x", (unsigned int) *port); ++ ++ return 0; ++ ++#endif /* ! GRUB_UTIL */ ++} ++ ++static struct builtin builtin_ioprobe = ++{ ++ "ioprobe", ++ ioprobe_func, ++ BUILTIN_CMDLINE, ++ "ioprobe DRIVE", ++ "Probe I/O ports used for the drive DRIVE." ++}; ++ ++ ++/* kernel */ ++static int ++kernel_func (char *arg, int flags) ++{ ++ int len; ++ kernel_t suggested_type = KERNEL_TYPE_NONE; ++ unsigned long load_flags = 0; ++ ++#ifndef AUTO_LINUX_MEM_OPT ++ load_flags |= KERNEL_LOAD_NO_MEM_OPTION; ++#endif ++ ++ /* Deal with GNU-style long options. */ ++ while (1) ++ { ++ /* If the option `--type=TYPE' is specified, convert the string to ++ a kernel type. */ ++ if (grub_memcmp (arg, "--type=", 7) == 0) ++ { ++ arg += 7; ++ ++ if (grub_memcmp (arg, "netbsd", 6) == 0) ++ suggested_type = KERNEL_TYPE_NETBSD; ++ else if (grub_memcmp (arg, "freebsd", 7) == 0) ++ suggested_type = KERNEL_TYPE_FREEBSD; ++ else if (grub_memcmp (arg, "openbsd", 7) == 0) ++ /* XXX: For now, OpenBSD is identical to NetBSD, from GRUB's ++ point of view. */ ++ suggested_type = KERNEL_TYPE_NETBSD; ++ else if (grub_memcmp (arg, "linux", 5) == 0) ++ suggested_type = KERNEL_TYPE_LINUX; ++ else if (grub_memcmp (arg, "biglinux", 8) == 0) ++ suggested_type = KERNEL_TYPE_BIG_LINUX; ++ else if (grub_memcmp (arg, "multiboot", 9) == 0) ++ suggested_type = KERNEL_TYPE_MULTIBOOT; ++ else ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ /* If the `--no-mem-option' is specified, don't pass a Linux's mem ++ option automatically. If the kernel is another type, this flag ++ has no effect. */ ++ else if (grub_memcmp (arg, "--no-mem-option", 15) == 0) ++ load_flags |= KERNEL_LOAD_NO_MEM_OPTION; ++ else ++ break; ++ ++ /* Try the next. */ ++ arg = skip_to (0, arg); ++ } ++ ++ len = grub_strlen (arg); ++ ++ /* Reset MB_CMDLINE. */ ++ mb_cmdline = (char *) MB_CMDLINE_BUF; ++ if (len + 1 > MB_CMDLINE_BUFLEN) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ /* Copy the command-line to MB_CMDLINE. */ ++ grub_memmove (mb_cmdline, arg, len + 1); ++ kernel_type = load_image (arg, mb_cmdline, suggested_type, load_flags); ++ if (kernel_type == KERNEL_TYPE_NONE) ++ return 1; ++ ++ mb_cmdline += len + 1; ++ return 0; ++} ++ ++static struct builtin builtin_kernel = ++{ ++ "kernel", ++ kernel_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]", ++ "Attempt to load the primary boot image from FILE. The rest of the" ++ " line is passed verbatim as the \"kernel command line\". Any modules" ++ " must be reloaded after using this command. The option --type is used" ++ " to suggest what type of kernel to be loaded. TYPE must be either of" ++ " \"netbsd\", \"freebsd\", \"openbsd\", \"linux\", \"biglinux\" and" ++ " \"multiboot\". The option --no-mem-option tells GRUB not to pass a" ++ " Linux's mem option automatically." ++}; ++ ++ ++/* lock */ ++static int ++lock_func (char *arg, int flags) ++{ ++ if (! auth && password) ++ { ++ errnum = ERR_PRIVILEGED; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_lock = ++{ ++ "lock", ++ lock_func, ++ BUILTIN_CMDLINE, ++ "lock", ++ "Break a command execution unless the user is authenticated." ++}; ++ ++ ++/* makeactive */ ++static int ++makeactive_func (char *arg, int flags) ++{ ++ if (! make_saved_active ()) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_makeactive = ++{ ++ "makeactive", ++ makeactive_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "makeactive", ++ "Set the active partition on the root disk to GRUB's root device." ++ " This command is limited to _primary_ PC partitions on a hard disk." ++}; ++ ++ ++/* map */ ++/* Map FROM_DRIVE to TO_DRIVE. */ ++static int ++map_func (char *arg, int flags) ++{ ++ char *to_drive; ++ char *from_drive; ++ unsigned long to, from; ++ int i; ++ ++ to_drive = arg; ++ from_drive = skip_to (0, arg); ++ ++ /* Get the drive number for TO_DRIVE. */ ++ set_device (to_drive); ++ if (errnum) ++ return 1; ++ to = current_drive; ++ ++ /* Get the drive number for FROM_DRIVE. */ ++ set_device (from_drive); ++ if (errnum) ++ return 1; ++ from = current_drive; ++ ++ /* Search for an empty slot in BIOS_DRIVE_MAP. */ ++ for (i = 0; i < DRIVE_MAP_SIZE; i++) ++ { ++ /* Perhaps the user wants to override the map. */ ++ if ((bios_drive_map[i] & 0xff) == from) ++ break; ++ ++ if (! bios_drive_map[i]) ++ break; ++ } ++ ++ if (i == DRIVE_MAP_SIZE) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ if (to == from) ++ /* If TO is equal to FROM, delete the entry. */ ++ grub_memmove ((char *) &bios_drive_map[i], (char *) &bios_drive_map[i + 1], ++ sizeof (unsigned short) * (DRIVE_MAP_SIZE - i)); ++ else ++ bios_drive_map[i] = from | (to << 8); ++ ++ return 0; ++} ++ ++static struct builtin builtin_map = ++{ ++ "map", ++ map_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "map TO_DRIVE FROM_DRIVE", ++ "Map the drive FROM_DRIVE to the drive TO_DRIVE. This is necessary" ++ " when you chain-load some operating systems, such as DOS, if such an" ++ " OS resides at a non-first drive." ++}; ++ ++ ++#ifdef USE_MD5_PASSWORDS ++/* md5crypt */ ++static int ++md5crypt_func (char *arg, int flags) ++{ ++ char crypted[36]; ++ char key[32]; ++ unsigned int seed; ++ int i; ++ const char *const seedchars = ++ "./0123456789ABCDEFGHIJKLMNOPQRST" ++ "UVWXYZabcdefghijklmnopqrstuvwxyz"; ++ ++ /* First create a salt. */ ++ ++ /* The magical prefix. */ ++ grub_memset (crypted, 0, sizeof (crypted)); ++ grub_memmove (crypted, "$1$", 3); ++ ++ /* Create the length of a salt. */ ++ seed = currticks (); ++ ++ /* Generate a salt. */ ++ for (i = 0; i < 8 && seed; i++) ++ { ++ /* FIXME: This should be more random. */ ++ crypted[3 + i] = seedchars[seed & 0x3f]; ++ seed >>= 6; ++ } ++ ++ /* A salt must be terminated with `$', if it is less than 8 chars. */ ++ crypted[3 + i] = '$'; ++ ++#ifdef DEBUG_MD5CRYPT ++ grub_printf ("salt = %s\n", crypted); ++#endif ++ ++ /* Get a password. */ ++ grub_memset (key, 0, sizeof (key)); ++ get_cmdline ("Password: ", key, sizeof (key) - 1, '*', 0); ++ ++ /* Crypt the key. */ ++ make_md5_password (key, crypted); ++ ++ grub_printf ("Encrypted: %s\n", crypted); ++ return 0; ++} ++ ++static struct builtin builtin_md5crypt = ++{ ++ "md5crypt", ++ md5crypt_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "md5crypt", ++ "Generate a password in MD5 format." ++}; ++#endif /* USE_MD5_PASSWORDS */ ++ ++ ++/* module */ ++static int ++module_func (char *arg, int flags) ++{ ++ int len = grub_strlen (arg); ++ ++ switch (kernel_type) ++ { ++ case KERNEL_TYPE_MULTIBOOT: ++ if (mb_cmdline + len + 1 > (char *) MB_CMDLINE_BUF + MB_CMDLINE_BUFLEN) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ grub_memmove (mb_cmdline, arg, len + 1); ++ if (! load_module (arg, mb_cmdline)) ++ return 1; ++ mb_cmdline += len + 1; ++ break; ++ ++ case KERNEL_TYPE_LINUX: ++ case KERNEL_TYPE_BIG_LINUX: ++ if (! load_initrd (arg)) ++ return 1; ++ break; ++ ++ default: ++ errnum = ERR_NEED_MB_KERNEL; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_module = ++{ ++ "module", ++ module_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "module FILE [ARG ...]", ++ "Load a boot module FILE for a Multiboot format boot image (no" ++ " interpretation of the file contents is made, so users of this" ++ " command must know what the kernel in question expects). The" ++ " rest of the line is passed as the \"module command line\", like" ++ " the `kernel' command." ++}; ++ ++ ++/* modulenounzip */ ++static int ++modulenounzip_func (char *arg, int flags) ++{ ++ int ret; ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 1; ++#endif ++ ++ ret = module_func (arg, flags); ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 0; ++#endif ++ ++ return ret; ++} ++ ++static struct builtin builtin_modulenounzip = ++{ ++ "modulenounzip", ++ modulenounzip_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "modulenounzip FILE [ARG ...]", ++ "The same as `module', except that automatic decompression is" ++ " disabled." ++}; ++ ++ ++/* pager [on|off] */ ++static int ++pager_func (char *arg, int flags) ++{ ++ /* If ARG is empty, toggle the flag. */ ++ if (! *arg) ++ use_pager = ! use_pager; ++ else if (grub_memcmp (arg, "on", 2) == 0) ++ use_pager = 1; ++ else if (grub_memcmp (arg, "off", 3) == 0) ++ use_pager = 0; ++ else ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ grub_printf (" Internal pager is now %s\n", use_pager ? "on" : "off"); ++ return 0; ++} ++ ++static struct builtin builtin_pager = ++{ ++ "pager", ++ pager_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "pager [FLAG]", ++ "Toggle pager mode with no argument. If FLAG is given and its value" ++ " is `on', turn on the mode. If FLAG is `off', turn off the mode." ++}; ++ ++ ++/* partnew PART TYPE START LEN */ ++static int ++partnew_func (char *arg, int flags) ++{ ++ int new_type, new_start, new_len; ++ 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); ++ void lba_to_chs (int lba, int *cl, int *ch, int *dh) ++ { ++ int cylinder, head, sector; ++ ++ sector = lba % buf_geom.sectors + 1; ++ head = (lba / buf_geom.sectors) % buf_geom.heads; ++ cylinder = lba / (buf_geom.sectors * buf_geom.heads); ++ ++ if (cylinder >= buf_geom.cylinders) ++ cylinder = buf_geom.cylinders - 1; ++ ++ *cl = sector | ((cylinder & 0x300) >> 2); ++ *ch = cylinder & 0xFF; ++ *dh = head; ++ } ++ ++ /* Get the drive and the partition. */ ++ if (! set_device (arg)) ++ return 1; ++ ++ /* The drive must be a hard disk. */ ++ if (! (current_drive & 0x80)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* The partition must a primary partition. */ ++ if ((current_partition >> 16) > 3 ++ || (current_partition & 0xFFFF) != 0xFFFF) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ entry = current_partition >> 16; ++ ++ /* Get the new partition type. */ ++ arg = skip_to (0, arg); ++ if (! safe_parse_maxint (&arg, &new_type)) ++ return 1; ++ ++ /* The partition type is unsigned char. */ ++ if (new_type > 0xFF) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* Get the new partition start. */ ++ arg = skip_to (0, arg); ++ if (! safe_parse_maxint (&arg, &new_start)) ++ return 1; ++ ++ /* Get the new partition length. */ ++ arg = skip_to (0, arg); ++ if (! safe_parse_maxint (&arg, &new_len)) ++ return 1; ++ ++ /* Read the MBR. */ ++ if (! rawread (current_drive, 0, 0, SECTOR_SIZE, mbr)) ++ return 1; ++ ++ /* Check if the new partition will fit in the disk. */ ++ if (new_start + new_len > buf_geom.total_sectors) ++ { ++ errnum = ERR_GEOM; ++ return 1; ++ } ++ ++ /* Store the partition information in the MBR. */ ++ lba_to_chs (new_start, &start_cl, &start_ch, &start_dh); ++ lba_to_chs (new_start + new_len - 1, &end_cl, &end_ch, &end_dh); ++ ++ PC_SLICE_FLAG (mbr, entry) = 0; ++ PC_SLICE_HEAD (mbr, entry) = start_dh; ++ PC_SLICE_SEC (mbr, entry) = start_cl; ++ PC_SLICE_CYL (mbr, entry) = start_ch; ++ PC_SLICE_TYPE (mbr, entry) = new_type; ++ PC_SLICE_EHEAD (mbr, entry) = end_dh; ++ PC_SLICE_ESEC (mbr, entry) = end_cl; ++ PC_SLICE_ECYL (mbr, entry) = end_ch; ++ PC_SLICE_START (mbr, entry) = new_start; ++ PC_SLICE_LENGTH (mbr, entry) = new_len; ++ ++ /* Make sure that the MBR has a valid signature. */ ++ PC_MBR_SIG (mbr) = PC_MBR_SIGNATURE; ++ ++ /* Write back the MBR to the disk. */ ++ buf_track = -1; ++ if (! rawwrite (current_drive, 0, mbr)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_partnew = ++{ ++ "partnew", ++ partnew_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "partnew PART TYPE START LEN", ++ "Create a primary partition at the starting address START with the" ++ " length LEN, with the type TYPE. START and LEN are in sector units." ++}; ++ ++ ++/* parttype PART TYPE */ ++static int ++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]; ++ ++ /* Get the drive and the partition. */ ++ if (! set_device (arg)) ++ return 1; ++ ++ /* The drive must be a hard disk. */ ++ if (! (current_drive & 0x80)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* The partition must be a PC slice. */ ++ if ((current_partition >> 16) == 0xFF ++ || (current_partition & 0xFFFF) != 0xFFFF) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* Get the new partition type. */ ++ arg = skip_to (0, arg); ++ if (! safe_parse_maxint (&arg, &new_type)) ++ return 1; ++ ++ /* The partition type is unsigned char. */ ++ if (new_type > 0xFF) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* Look for the partition. */ ++ while (next_partition (current_drive, 0xFFFFFF, &part, &type, ++ &start, &len, &offset, &entry, ++ &ext_offset, mbr)) ++ { ++ if (part == current_partition) ++ { ++ /* Found. */ ++ ++ /* Set the type to NEW_TYPE. */ ++ PC_SLICE_TYPE (mbr, entry) = new_type; ++ ++ /* Write back the MBR to the disk. */ ++ buf_track = -1; ++ if (! rawwrite (current_drive, offset, mbr)) ++ return 1; ++ ++ /* Succeed. */ ++ return 0; ++ } ++ } ++ ++ /* The partition was not found. ERRNUM was set by next_partition. */ ++ return 1; ++} ++ ++static struct builtin builtin_parttype = ++{ ++ "parttype", ++ parttype_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "parttype PART TYPE", ++ "Change the type of the partition PART to TYPE." ++}; ++ ++ ++/* password */ ++static int ++password_func (char *arg, int flags) ++{ ++ int len; ++ password_t type = PASSWORD_PLAIN; ++ ++#ifdef USE_MD5_PASSWORDS ++ if (grub_memcmp (arg, "--md5", 5) == 0) ++ { ++ type = PASSWORD_MD5; ++ arg = skip_to (0, arg); ++ } ++#endif ++ if (grub_memcmp (arg, "--", 2) == 0) ++ { ++ type = PASSWORD_UNSUPPORTED; ++ arg = skip_to (0, arg); ++ } ++ ++ if ((flags & (BUILTIN_CMDLINE | BUILTIN_SCRIPT)) != 0) ++ { ++ /* Do password check! */ ++ char entered[32]; ++ ++ /* Wipe out any previously entered password */ ++ entered[0] = 0; ++ get_cmdline ("Password: ", entered, 31, '*', 0); ++ ++ nul_terminate (arg); ++ if (check_password (entered, arg, type) != 0) ++ { ++ errnum = ERR_PRIVILEGED; ++ return 1; ++ } ++ } ++ else ++ { ++ len = grub_strlen (arg); ++ ++ /* PASSWORD NUL NUL ... */ ++ if (len + 2 > PASSWORD_BUFLEN) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ /* Copy the password and clear the rest of the buffer. */ ++ password = (char *) PASSWORD_BUF; ++ grub_memmove (password, arg, len); ++ grub_memset (password + len, 0, PASSWORD_BUFLEN - len); ++ password_type = type; ++ } ++ return 0; ++} ++ ++static struct builtin builtin_password = ++{ ++ "password", ++ password_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_NO_ECHO, ++ "password [--md5] 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" ++ " FILE as a new config file and restarts the GRUB Stage 2. If you" ++ " omit the argument FILE, then GRUB just unlocks privileged" ++ " 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." ++}; ++ ++ ++/* pause */ ++static int ++pause_func (char *arg, int flags) ++{ ++ printf("%s\n", arg); ++ ++ /* If ESC is returned, then abort this entry. */ ++ if (ASCII_CHAR (getkey ()) == 27) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_pause = ++{ ++ "pause", ++ pause_func, ++ BUILTIN_CMDLINE | BUILTIN_NO_ECHO, ++ "pause [MESSAGE ...]", ++ "Print MESSAGE, then wait until a key is pressed." ++}; ++ ++ ++#ifdef GRUB_UTIL ++/* quit */ ++static int ++quit_func (char *arg, int flags) ++{ ++ stop (); ++ ++ /* Never reach here. */ ++ return 0; ++} ++ ++static struct builtin builtin_quit = ++{ ++ "quit", ++ quit_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "quit", ++ "Exit from the GRUB shell." ++}; ++#endif /* GRUB_UTIL */ ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* rarp */ ++static int ++rarp_func (char *arg, int flags) ++{ ++ if (! rarp ()) ++ { ++ if (errnum == ERR_NONE) ++ errnum = ERR_DEV_VALUES; ++ ++ return 1; ++ } ++ ++ /* Notify the configuration. */ ++ print_network_configuration (); ++ return 0; ++} ++ ++static struct builtin builtin_rarp = ++{ ++ "rarp", ++ rarp_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "rarp", ++ "Initialize a network device via RARP." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++static int ++read_func (char *arg, int flags) ++{ ++ int addr; ++ ++ if (! safe_parse_maxint (&arg, &addr)) ++ return 1; ++ ++ grub_printf ("Address 0x%x: Value 0x%x\n", ++ addr, *((unsigned *) RAW_ADDR (addr))); ++ return 0; ++} ++ ++static struct builtin builtin_read = ++{ ++ "read", ++ read_func, ++ BUILTIN_CMDLINE, ++ "read ADDR", ++ "Read a 32-bit value from memory at address ADDR and" ++ " display it in hex format." ++}; ++ ++ ++/* reboot */ ++static int ++reboot_func (char *arg, int flags) ++{ ++ grub_reboot (); ++ ++ /* Never reach here. */ ++ return 1; ++} ++ ++static struct builtin builtin_reboot = ++{ ++ "reboot", ++ reboot_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "reboot", ++ "Reboot your system." ++}; ++ ++ ++/* Print the root device information. */ ++static void ++print_root_device (void) ++{ ++ if (saved_drive == NETWORK_DRIVE) ++ { ++ /* Network drive. */ ++ grub_printf (" (nd):"); ++ } ++ else if (saved_drive & 0x80) ++ { ++ /* Hard disk drive. */ ++ grub_printf (" (hd%d", saved_drive - 0x80); ++ ++ if ((saved_partition & 0xFF0000) != 0xFF0000) ++ grub_printf (",%d", saved_partition >> 16); ++ ++ if ((saved_partition & 0x00FF00) != 0x00FF00) ++ grub_printf (",%c", ((saved_partition >> 8) & 0xFF) + 'a'); ++ ++ grub_printf ("):"); ++ } ++ else ++ { ++ /* Floppy disk drive. */ ++ grub_printf (" (fd%d):", saved_drive); ++ } ++ ++ /* Print the filesystem information. */ ++ current_partition = saved_partition; ++ current_drive = saved_drive; ++ print_fsys_type (); ++} ++ ++static int ++real_root_func (char *arg, int attempt_mount) ++{ ++ int hdbias = 0; ++ char *biasptr; ++ char *next; ++ ++ /* If ARG is empty, just print the current root device. */ ++ if (! *arg) ++ { ++ print_root_device (); ++ return 0; ++ } ++ ++ /* Call set_device to get the drive and the partition in ARG. */ ++ next = set_device (arg); ++ if (! next) ++ return 1; ++ ++ /* Ignore ERR_FSYS_MOUNT. */ ++ if (attempt_mount) ++ { ++ if (! open_device () && errnum != ERR_FSYS_MOUNT) ++ return 1; ++ } ++ else ++ { ++ /* This is necessary, because the location of a partition table ++ must be set appropriately. */ ++ if (open_partition ()) ++ { ++ set_bootdev (0); ++ if (errnum) ++ return 1; ++ } ++ } ++ ++ /* Clear ERRNUM. */ ++ errnum = 0; ++ saved_partition = current_partition; ++ saved_drive = current_drive; ++ ++ if (attempt_mount) ++ { ++ /* BSD and chainloading evil hacks !! */ ++ biasptr = skip_to (0, next); ++ safe_parse_maxint (&biasptr, &hdbias); ++ errnum = 0; ++ bootdev = set_bootdev (hdbias); ++ if (errnum) ++ return 1; ++ ++ /* Print the type of the filesystem. */ ++ print_fsys_type (); ++ } ++ ++ return 0; ++} ++ ++static int ++root_func (char *arg, int flags) ++{ ++ return real_root_func (arg, 1); ++} ++ ++static struct builtin builtin_root = ++{ ++ "root", ++ root_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "root [DEVICE [HDBIAS]]", ++ "Set the current \"root device\" to the device DEVICE, then" ++ " attempt to mount it to get the partition size (for passing the" ++ " partition descriptor in `ES:ESI', used by some chain-loaded" ++ " bootloaders), the BSD drive-type (for booting BSD kernels using" ++ " their native boot format), and correctly determine " ++ " the PC partition where a BSD sub-partition is located. The" ++ " optional HDBIAS parameter is a number to tell a BSD kernel" ++ " how many BIOS drive numbers are on controllers before the current" ++ " one. For example, if there is an IDE disk and a SCSI disk, and your" ++ " FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS." ++}; ++ ++ ++/* rootnoverify */ ++static int ++rootnoverify_func (char *arg, int flags) ++{ ++ return real_root_func (arg, 0); ++} ++ ++static struct builtin builtin_rootnoverify = ++{ ++ "rootnoverify", ++ rootnoverify_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "rootnoverify [DEVICE [HDBIAS]]", ++ "Similar to `root', but don't attempt to mount the partition. This" ++ " is useful for when an OS is outside of the area of the disk that" ++ " GRUB can read, but setting the correct root device is still" ++ " desired. Note that the items mentioned in `root' which" ++ " derived from attempting the mount will NOT work correctly." ++}; ++ ++ ++/* savedefault */ ++static int ++savedefault_func (char *arg, int flags) ++{ ++#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)) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++ } ++ ++ /* Determine a saved entry number. */ ++ if (*arg) ++ { ++ 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; ++ } ++ ++ entryno = fallback_entries[index]; ++ } ++ else if (! safe_parse_maxint (&arg, &entryno)) ++ return 1; ++ } ++ else ++ entryno = current_entryno; ++ ++ /* Open the default file. */ ++ saved_drive = boot_drive; ++ saved_partition = install_partition; ++ if (grub_open (default_file)) ++ { ++ int len; ++ ++ disk_read_hook = disk_read_savesect_func; ++ len = grub_read (buf, sizeof (buf)); ++ disk_read_hook = 0; ++ grub_close (); ++ ++ if (len != sizeof (buf)) ++ { ++ /* This is too small. Do not modify the file manually, please! */ ++ errnum = ERR_READ; ++ goto fail; ++ } ++ ++ 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; ++ ++ 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; ++ } ++ 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; ++ } ++ ++ /* Clear the cache. */ ++ buf_track = -1; ++ } ++ ++ fail: ++ saved_drive = tmp_drive; ++ saved_partition = tmp_partition; ++ return errnum; ++#else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++#endif /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ ++} ++ ++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 SUPPORT_SERIAL ++/* serial */ ++static int ++serial_func (char *arg, int flags) ++{ ++ unsigned short port = serial_hw_get_port (0); ++ unsigned int speed = 9600; ++ int word_len = UART_8BITS_WORD; ++ int parity = UART_NO_PARITY; ++ int stop_bit_len = UART_1_STOP_BIT; ++ ++ /* Process GNU-style long options. ++ FIXME: We should implement a getopt-like function, to avoid ++ duplications. */ ++ while (1) ++ { ++ if (grub_memcmp (arg, "--unit=", sizeof ("--unit=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--unit=") - 1; ++ int unit; ++ ++ if (! safe_parse_maxint (&p, &unit)) ++ return 1; ++ ++ if (unit < 0 || unit > 3) ++ { ++ errnum = ERR_DEV_VALUES; ++ return 1; ++ } ++ ++ port = serial_hw_get_port (unit); ++ } ++ else if (grub_memcmp (arg, "--speed=", sizeof ("--speed=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--speed=") - 1; ++ int num; ++ ++ if (! safe_parse_maxint (&p, &num)) ++ return 1; ++ ++ speed = (unsigned int) num; ++ } ++ else if (grub_memcmp (arg, "--port=", sizeof ("--port=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--port=") - 1; ++ int num; ++ ++ if (! safe_parse_maxint (&p, &num)) ++ return 1; ++ ++ port = (unsigned short) num; ++ } ++ else if (grub_memcmp (arg, "--word=", sizeof ("--word=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--word=") - 1; ++ int len; ++ ++ if (! safe_parse_maxint (&p, &len)) ++ return 1; ++ ++ switch (len) ++ { ++ case 5: word_len = UART_5BITS_WORD; break; ++ case 6: word_len = UART_6BITS_WORD; break; ++ case 7: word_len = UART_7BITS_WORD; break; ++ case 8: word_len = UART_8BITS_WORD; break; ++ default: ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ else if (grub_memcmp (arg, "--stop=", sizeof ("--stop=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--stop=") - 1; ++ int len; ++ ++ if (! safe_parse_maxint (&p, &len)) ++ return 1; ++ ++ switch (len) ++ { ++ case 1: stop_bit_len = UART_1_STOP_BIT; break; ++ case 2: stop_bit_len = UART_2_STOP_BITS; break; ++ default: ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ else if (grub_memcmp (arg, "--parity=", sizeof ("--parity=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--parity=") - 1; ++ ++ if (grub_memcmp (p, "no", sizeof ("no") - 1) == 0) ++ parity = UART_NO_PARITY; ++ else if (grub_memcmp (p, "odd", sizeof ("odd") - 1) == 0) ++ parity = UART_ODD_PARITY; ++ else if (grub_memcmp (p, "even", sizeof ("even") - 1) == 0) ++ parity = UART_EVEN_PARITY; ++ else ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++# ifdef GRUB_UTIL ++ /* In the grub shell, don't use any port number but open a tty ++ device instead. */ ++ else if (grub_memcmp (arg, "--device=", sizeof ("--device=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--device=") - 1; ++ char dev[256]; /* XXX */ ++ char *q = dev; ++ ++ while (*p && ! grub_isspace (*p)) ++ *q++ = *p++; ++ ++ *q = 0; ++ serial_set_device (dev); ++ } ++# endif /* GRUB_UTIL */ ++ else ++ break; ++ ++ arg = skip_to (0, arg); ++ } ++ ++ /* Initialize the serial unit. */ ++ if (! serial_hw_init (port, speed, word_len, parity, stop_bit_len)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_serial = ++{ ++ "serial", ++ serial_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] [--stop=STOP] [--device=DEV]", ++ "Initialize a serial device. UNIT is a digit that specifies which serial" ++ " device is used (e.g. 0 == COM1). If you need to specify the port number," ++ " set it by --port. SPEED is the DTE-DTE speed. WORD is the word length," ++ " PARITY is the type of parity, which is one of `no', `odd' and `even'." ++ " STOP is the length of stop bit(s). The option --device can be used only" ++ " in the grub shell, which specifies the file name of a tty device. The" ++ " default values are COM1, 9600, 8N1." ++}; ++#endif /* SUPPORT_SERIAL */ ++ ++ ++/* setkey */ ++struct keysym ++{ ++ char *unshifted_name; /* the name in unshifted state */ ++ char *shifted_name; /* the name in shifted state */ ++ unsigned char unshifted_ascii; /* the ascii code in unshifted state */ ++ unsigned char shifted_ascii; /* the ascii code in shifted state */ ++ unsigned char keycode; /* keyboard scancode */ ++}; ++ ++/* The table for key symbols. If the "shifted" member of an entry is ++ NULL, the entry does not have shifted state. */ ++static struct keysym keysym_table[] = ++{ ++ {"escape", 0, 0x1b, 0, 0x01}, ++ {"1", "exclam", '1', '!', 0x02}, ++ {"2", "at", '2', '@', 0x03}, ++ {"3", "numbersign", '3', '#', 0x04}, ++ {"4", "dollar", '4', '$', 0x05}, ++ {"5", "percent", '5', '%', 0x06}, ++ {"6", "caret", '6', '^', 0x07}, ++ {"7", "ampersand", '7', '&', 0x08}, ++ {"8", "asterisk", '8', '*', 0x09}, ++ {"9", "parenleft", '9', '(', 0x0a}, ++ {"0", "parenright", '0', ')', 0x0b}, ++ {"minus", "underscore", '-', '_', 0x0c}, ++ {"equal", "plus", '=', '+', 0x0d}, ++ {"backspace", 0, '\b', 0, 0x0e}, ++ {"tab", 0, '\t', 0, 0x0f}, ++ {"q", "Q", 'q', 'Q', 0x10}, ++ {"w", "W", 'w', 'W', 0x11}, ++ {"e", "E", 'e', 'E', 0x12}, ++ {"r", "R", 'r', 'R', 0x13}, ++ {"t", "T", 't', 'T', 0x14}, ++ {"y", "Y", 'y', 'Y', 0x15}, ++ {"u", "U", 'u', 'U', 0x16}, ++ {"i", "I", 'i', 'I', 0x17}, ++ {"o", "O", 'o', 'O', 0x18}, ++ {"p", "P", 'p', 'P', 0x19}, ++ {"bracketleft", "braceleft", '[', '{', 0x1a}, ++ {"bracketright", "braceright", ']', '}', 0x1b}, ++ {"enter", 0, '\n', 0, 0x1c}, ++ {"control", 0, 0, 0, 0x1d}, ++ {"a", "A", 'a', 'A', 0x1e}, ++ {"s", "S", 's', 'S', 0x1f}, ++ {"d", "D", 'd', 'D', 0x20}, ++ {"f", "F", 'f', 'F', 0x21}, ++ {"g", "G", 'g', 'G', 0x22}, ++ {"h", "H", 'h', 'H', 0x23}, ++ {"j", "J", 'j', 'J', 0x24}, ++ {"k", "K", 'k', 'K', 0x25}, ++ {"l", "L", 'l', 'L', 0x26}, ++ {"semicolon", "colon", ';', ':', 0x27}, ++ {"quote", "doublequote", '\'', '"', 0x28}, ++ {"backquote", "tilde", '`', '~', 0x29}, ++ {"shift", 0, 0, 0, 0x2a}, ++ {"backslash", "bar", '\\', '|', 0x2b}, ++ {"z", "Z", 'z', 'Z', 0x2c}, ++ {"x", "X", 'x', 'X', 0x2d}, ++ {"c", "C", 'c', 'C', 0x2e}, ++ {"v", "V", 'v', 'V', 0x2f}, ++ {"b", "B", 'b', 'B', 0x30}, ++ {"n", "N", 'n', 'N', 0x31}, ++ {"m", "M", 'm', 'M', 0x32}, ++ {"comma", "less", ',', '<', 0x33}, ++ {"period", "greater", '.', '>', 0x34}, ++ {"slash", "question", '/', '?', 0x35}, ++ {"alt", 0, 0, 0, 0x38}, ++ {"space", 0, ' ', 0, 0x39}, ++ {"capslock", 0, 0, 0, 0x3a}, ++ {"F1", 0, 0, 0, 0x3b}, ++ {"F2", 0, 0, 0, 0x3c}, ++ {"F3", 0, 0, 0, 0x3d}, ++ {"F4", 0, 0, 0, 0x3e}, ++ {"F5", 0, 0, 0, 0x3f}, ++ {"F6", 0, 0, 0, 0x40}, ++ {"F7", 0, 0, 0, 0x41}, ++ {"F8", 0, 0, 0, 0x42}, ++ {"F9", 0, 0, 0, 0x43}, ++ {"F10", 0, 0, 0, 0x44}, ++ /* Caution: do not add NumLock here! we cannot deal with it properly. */ ++ {"delete", 0, 0x7f, 0, 0x53} ++}; ++ ++static int ++setkey_func (char *arg, int flags) ++{ ++ 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; ++ ++ 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; ++ } ++ ++ auto int find_ascii_code (char *key) ++ { ++ 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; ++ } ++ ++ to_key = arg; ++ from_key = skip_to (0, to_key); ++ ++ if (! *to_key) ++ { ++ /* If the user specifies no argument, reset the key mappings. */ ++ grub_memset (bios_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short)); ++ grub_memset (ascii_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short)); ++ ++ return 0; ++ } ++ else if (! *from_key) ++ { ++ /* The user must specify two arguments or zero argument. */ ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ nul_terminate (to_key); ++ nul_terminate (from_key); ++ ++ to_code = find_ascii_code (to_key); ++ from_code = find_ascii_code (from_key); ++ if (! to_code || ! from_code) ++ { ++ map_in_interrupt = 1; ++ to_code = find_key_code (to_key); ++ from_code = find_key_code (from_key); ++ if (! to_code || ! from_code) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ ++ if (map_in_interrupt) ++ { ++ int i; ++ ++ /* Find an empty slot. */ ++ for (i = 0; i < KEY_MAP_SIZE; i++) ++ { ++ if ((bios_key_map[i] & 0xff) == from_code) ++ /* Perhaps the user wants to overwrite the map. */ ++ break; ++ ++ if (! bios_key_map[i]) ++ break; ++ } ++ ++ if (i == KEY_MAP_SIZE) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ if (to_code == from_code) ++ /* If TO is equal to FROM, delete the entry. */ ++ grub_memmove ((char *) &bios_key_map[i], ++ (char *) &bios_key_map[i + 1], ++ sizeof (unsigned short) * (KEY_MAP_SIZE - i)); ++ else ++ bios_key_map[i] = (to_code << 8) | from_code; ++ ++ /* Ugly but should work. */ ++ unset_int15_handler (); ++ set_int15_handler (); ++ } ++ else ++ { ++ int i; ++ ++ /* Find an empty slot. */ ++ for (i = 0; i < KEY_MAP_SIZE; i++) ++ { ++ if ((ascii_key_map[i] & 0xff) == from_code) ++ /* Perhaps the user wants to overwrite the map. */ ++ break; ++ ++ if (! ascii_key_map[i]) ++ break; ++ } ++ ++ if (i == KEY_MAP_SIZE) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ if (to_code == from_code) ++ /* If TO is equal to FROM, delete the entry. */ ++ grub_memmove ((char *) &ascii_key_map[i], ++ (char *) &ascii_key_map[i + 1], ++ sizeof (unsigned short) * (KEY_MAP_SIZE - i)); ++ else ++ ascii_key_map[i] = (to_code << 8) | from_code; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_setkey = ++{ ++ "setkey", ++ setkey_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "setkey [TO_KEY FROM_KEY]", ++ "Change the keyboard map. The key FROM_KEY is mapped to the key TO_KEY." ++ " A key must be an alphabet, a digit, or one of these: escape, exclam," ++ " at, numbersign, dollar, percent, caret, ampersand, asterisk, parenleft," ++ " parenright, minus, underscore, equal, plus, backspace, tab, bracketleft," ++ " braceleft, bracketright, braceright, enter, control, semicolon, colon," ++ " quote, doublequote, backquote, tilde, shift, backslash, bar, comma," ++ " less, period, greater, slash, question, alt, space, capslock, FX (X" ++ " is a digit), and delete. If no argument is specified, reset key" ++ " mappings." ++}; ++ ++ ++/* setup */ ++static int ++setup_func (char *arg, int flags) ++{ ++ /* Point to the string of the installed drive/partition. */ ++ char *install_ptr; ++ /* Point to the string of the drive/parition where the GRUB images ++ reside. */ ++ char *image_ptr; ++ unsigned long installed_drive, installed_partition; ++ unsigned long image_drive, image_partition; ++ unsigned long tmp_drive, tmp_partition; ++ char stage1[64]; ++ char stage2[64]; ++ char config_filename[64]; ++ char real_config_filename[64]; ++ char cmd_arg[256]; ++ char device[16]; ++ char *buffer = (char *) RAW_ADDR (0x100000); ++ int is_force_lba = 0; ++ char *stage2_arg = 0; ++ char *prefix = 0; ++ ++ auto int check_file (char *file); ++ auto void sprint_device (int drive, int partition); ++ auto int embed_stage1_5 (char * stage1_5, int drive, int partition); ++ ++ /* Check if the file FILE exists like Autoconf. */ ++ int check_file (char *file) ++ { ++ int ret; ++ ++ grub_printf (" Checking if \"%s\" exists... ", file); ++ ret = grub_open (file); ++ if (ret) ++ { ++ grub_close (); ++ grub_printf ("yes\n"); ++ } ++ else ++ grub_printf ("no\n"); ++ ++ return ret; ++ } ++ ++ /* Construct a device name in DEVICE. */ ++ void sprint_device (int drive, int partition) ++ { ++ grub_sprintf (device, "(%cd%d", ++ (drive & 0x80) ? 'h' : 'f', ++ drive & ~0x80); ++ if ((partition & 0xFF0000) != 0xFF0000) ++ { ++ char tmp[16]; ++ grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF); ++ grub_strncat (device, tmp, 256); ++ } ++ if ((partition & 0x00FF00) != 0x00FF00) ++ { ++ char tmp[16]; ++ grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF)); ++ grub_strncat (device, tmp, 256); ++ } ++ grub_strncat (device, ")", 256); ++ } ++ ++ int embed_stage1_5 (char *stage1_5, int drive, int partition) ++ { ++ /* We install GRUB into the MBR, so try to embed the ++ Stage 1.5 in the sectors right after the MBR. */ ++ sprint_device (drive, partition); ++ grub_sprintf (cmd_arg, "%s %s", stage1_5, device); ++ ++ /* Notify what will be run. */ ++ grub_printf (" Running \"embed %s\"... ", cmd_arg); ++ ++ embed_func (cmd_arg, flags); ++ if (! errnum) ++ { ++ /* Construct the blocklist representation. */ ++ grub_sprintf (buffer, "%s%s", device, embed_info); ++ grub_printf ("succeeded\n"); ++ return 1; ++ } ++ else ++ { ++ grub_printf ("failed (this is not fatal)\n"); ++ return 0; ++ } ++ } ++ ++ struct stage1_5_map { ++ char *fsys; ++ char *name; ++ }; ++ struct stage1_5_map stage1_5_map[] = ++ { ++ {"ext2fs", "/e2fs_stage1_5"}, ++ {"fat", "/fat_stage1_5"}, ++ {"ufs2", "/ufs2_stage1_5"}, ++ {"ffs", "/ffs_stage1_5"}, ++ {"iso9660", "/iso9660_stage1_5"}, ++ {"jfs", "/jfs_stage1_5"}, ++ {"minix", "/minix_stage1_5"}, ++ {"reiserfs", "/reiserfs_stage1_5"}, ++ {"vstafs", "/vstafs_stage1_5"}, ++ {"xfs", "/xfs_stage1_5"} ++ }; ++ ++ tmp_drive = saved_drive; ++ tmp_partition = saved_partition; ++ ++ /* Check if the user specifies --force-lba. */ ++ while (1) ++ { ++ if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0) ++ { ++ is_force_lba = 1; ++ arg = skip_to (0, arg); ++ } ++ else if (grub_memcmp ("--prefix=", arg, sizeof ("--prefix=") - 1) == 0) ++ { ++ prefix = arg + sizeof ("--prefix=") - 1; ++ arg = skip_to (0, arg); ++ nul_terminate (prefix); ++ } ++#ifdef GRUB_UTIL ++ else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0) ++ { ++ stage2_arg = arg; ++ arg = skip_to (0, arg); ++ nul_terminate (stage2_arg); ++ } ++#endif /* GRUB_UTIL */ ++ else ++ break; ++ } ++ ++ install_ptr = arg; ++ image_ptr = skip_to (0, install_ptr); ++ ++ /* Make sure that INSTALL_PTR is valid. */ ++ set_device (install_ptr); ++ if (errnum) ++ return 1; ++ ++ installed_drive = current_drive; ++ installed_partition = current_partition; ++ ++ /* Mount the drive pointed by IMAGE_PTR. */ ++ if (*image_ptr) ++ { ++ /* If the drive/partition where the images reside is specified, ++ get the drive and the partition. */ ++ set_device (image_ptr); ++ if (errnum) ++ return 1; ++ } ++ else ++ { ++ /* If omitted, use SAVED_PARTITION and SAVED_DRIVE. */ ++ current_drive = saved_drive; ++ current_partition = saved_partition; ++ } ++ ++ image_drive = saved_drive = current_drive; ++ image_partition = saved_partition = current_partition; ++ ++ /* Open it. */ ++ if (! open_device ()) ++ goto fail; ++ ++ /* Check if stage1 exists. If the user doesn't specify the option ++ `--prefix', attempt /boot/grub and /grub. */ ++ /* NOTE: It is dangerous to run this command without `--prefix' in the ++ grub shell, since that affects `--stage2'. */ ++ if (! prefix) ++ { ++ prefix = "/boot/grub"; ++ grub_sprintf (stage1, "%s%s", prefix, "/stage1"); ++ if (! check_file (stage1)) ++ { ++ errnum = ERR_NONE; ++ prefix = "/grub"; ++ grub_sprintf (stage1, "%s%s", prefix, "/stage1"); ++ if (! check_file (stage1)) ++ goto fail; ++ } ++ } ++ else ++ { ++ grub_sprintf (stage1, "%s%s", prefix, "/stage1"); ++ if (! check_file (stage1)) ++ goto fail; ++ } ++ ++ /* The prefix was determined. */ ++ grub_sprintf (stage2, "%s%s", prefix, "/stage2"); ++ grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst"); ++ *real_config_filename = 0; ++ ++ /* Check if stage2 exists. */ ++ if (! check_file (stage2)) ++ goto fail; ++ ++ { ++ char *fsys = fsys_table[fsys_type].name; ++ int i; ++ int size = sizeof (stage1_5_map) / sizeof (stage1_5_map[0]); ++ ++ /* Iterate finding the same filesystem name as FSYS. */ ++ for (i = 0; i < size; i++) ++ if (grub_strcmp (fsys, stage1_5_map[i].fsys) == 0) ++ { ++ /* OK, check if the Stage 1.5 exists. */ ++ char stage1_5[64]; ++ ++ grub_sprintf (stage1_5, "%s%s", prefix, stage1_5_map[i].name); ++ if (check_file (stage1_5)) ++ { ++ if (embed_stage1_5 (stage1_5, ++ installed_drive, installed_partition) ++ || embed_stage1_5 (stage1_5, ++ image_drive, image_partition)) ++ { ++ grub_strcpy (real_config_filename, config_filename); ++ sprint_device (image_drive, image_partition); ++ grub_sprintf (config_filename, "%s%s", device, stage2); ++ grub_strcpy (stage2, buffer); ++ } ++ } ++ errnum = 0; ++ break; ++ } ++ } ++ ++ /* Construct a string that is used by the command "install" as its ++ arguments. */ ++ sprint_device (installed_drive, installed_partition); ++ ++#if 1 ++ /* Don't embed a drive number unnecessarily. */ ++ grub_sprintf (cmd_arg, "%s%s%s%s %s%s %s p %s %s", ++ is_force_lba? "--force-lba " : "", ++ stage2_arg? stage2_arg : "", ++ stage2_arg? " " : "", ++ stage1, ++ (installed_drive != image_drive) ? "d " : "", ++ device, ++ stage2, ++ config_filename, ++ real_config_filename); ++#else /* NOT USED */ ++ /* This code was used, because we belived some BIOSes had a problem ++ that they didn't pass a booting drive correctly. It turned out, ++ however, stage1 could trash a booting drive when checking LBA support, ++ because some BIOSes modified the register %dx in INT 13H, AH=48H. ++ So it becamed unclear whether GRUB should use a pre-defined booting ++ drive or not. If the problem still exists, it would be necessary to ++ switch back to this code. */ ++ grub_sprintf (cmd_arg, "%s%s%s%s d %s %s p %s %s", ++ is_force_lba? "--force-lba " : "", ++ stage2_arg? stage2_arg : "", ++ stage2_arg? " " : "", ++ stage1, ++ device, ++ stage2, ++ config_filename, ++ real_config_filename); ++#endif /* NOT USED */ ++ ++ /* Notify what will be run. */ ++ grub_printf (" Running \"install %s\"... ", cmd_arg); ++ ++ /* Make sure that SAVED_DRIVE and SAVED_PARTITION are identical ++ with IMAGE_DRIVE and IMAGE_PARTITION, respectively. */ ++ saved_drive = image_drive; ++ saved_partition = image_partition; ++ ++ /* Run the command. */ ++ if (! install_func (cmd_arg, flags)) ++ grub_printf ("succeeded\nDone.\n"); ++ else ++ grub_printf ("failed\n"); ++ ++ fail: ++ saved_drive = tmp_drive; ++ saved_partition = tmp_partition; ++ return errnum; ++} ++ ++static struct builtin builtin_setup = ++{ ++ "setup", ++ setup_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]", ++ "Set up the installation of GRUB automatically. This command uses" ++ " the more flexible command \"install\" in the backend and installs" ++ " GRUB into the device INSTALL_DEVICE. If IMAGE_DEVICE is specified," ++ " then find the GRUB images in the device IMAGE_DEVICE, otherwise" ++ " use the current \"root device\", which can be set by the command" ++ " \"root\". If you know that your BIOS should support LBA but GRUB" ++ " doesn't work in LBA mode, specify the option `--force-lba'." ++ " If you install GRUB under the grub shell and you cannot unmount the" ++ " partition where GRUB images reside, specify the option `--stage2'" ++ " to tell GRUB the file name under your OS." ++}; ++ ++ ++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) ++/* terminal */ ++static int ++terminal_func (char *arg, int flags) ++{ ++ /* The index of the default terminal in TERM_TABLE. */ ++ int default_term = -1; ++ struct term_entry *prev_term = current_term; ++ int to = -1; ++ int lines = 0; ++ int no_message = 0; ++ unsigned long term_flags = 0; ++ /* XXX: Assume less than 32 terminals. */ ++ unsigned long term_bitmap = 0; ++ ++ /* Get GNU-style long options. */ ++ while (1) ++ { ++ if (grub_memcmp (arg, "--dumb", sizeof ("--dumb") - 1) == 0) ++ term_flags |= TERM_DUMB; ++ else if (grub_memcmp (arg, "--no-echo", sizeof ("--no-echo") - 1) == 0) ++ /* ``--no-echo'' implies ``--no-edit''. */ ++ term_flags |= (TERM_NO_ECHO | TERM_NO_EDIT); ++ else if (grub_memcmp (arg, "--no-edit", sizeof ("--no-edit") - 1) == 0) ++ term_flags |= TERM_NO_EDIT; ++ else if (grub_memcmp (arg, "--timeout=", sizeof ("--timeout=") - 1) == 0) ++ { ++ char *val = arg + sizeof ("--timeout=") - 1; ++ ++ if (! safe_parse_maxint (&val, &to)) ++ return 1; ++ } ++ else if (grub_memcmp (arg, "--lines=", sizeof ("--lines=") - 1) == 0) ++ { ++ char *val = arg + sizeof ("--lines=") - 1; ++ ++ if (! safe_parse_maxint (&val, &lines)) ++ return 1; ++ ++ /* Probably less than four is meaningless.... */ ++ if (lines < 4) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ else if (grub_memcmp (arg, "--silent", sizeof ("--silent") - 1) == 0) ++ no_message = 1; ++ else ++ break; ++ ++ arg = skip_to (0, arg); ++ } ++ ++ /* If no argument is specified, show current setting. */ ++ if (! *arg) ++ { ++ grub_printf ("%s%s%s%s\n", ++ current_term->name, ++ current_term->flags & TERM_DUMB ? " (dumb)" : "", ++ current_term->flags & TERM_NO_EDIT ? " (no edit)" : "", ++ current_term->flags & TERM_NO_ECHO ? " (no echo)" : ""); ++ return 0; ++ } ++ ++ while (*arg) ++ { ++ int i; ++ char *next = skip_to (0, arg); ++ ++ nul_terminate (arg); ++ ++ for (i = 0; term_table[i].name; i++) ++ { ++ if (grub_strcmp (arg, term_table[i].name) == 0) ++ { ++ if (term_table[i].flags & TERM_NEED_INIT) ++ { ++ errnum = ERR_DEV_NEED_INIT; ++ return 1; ++ } ++ ++ if (default_term < 0) ++ default_term = i; ++ ++ term_bitmap |= (1 << i); ++ break; ++ } ++ } ++ ++ if (! term_table[i].name) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ arg = next; ++ } ++ ++ /* If multiple terminals are specified, wait until the user pushes any ++ key on one of the terminals. */ ++ if (term_bitmap & ~(1 << default_term)) ++ { ++ int time1, time2 = -1; ++ ++ /* XXX: Disable the pager. */ ++ count_lines = -1; ++ ++ /* Get current time. */ ++ while ((time1 = getrtsecs ()) == 0xFF) ++ ; ++ ++ /* Wait for a key input. */ ++ while (to) ++ { ++ int i; ++ ++ for (i = 0; term_table[i].name; i++) ++ { ++ if (term_bitmap & (1 << i)) ++ { ++ if (term_table[i].checkkey () >= 0) ++ { ++ (void) term_table[i].getkey (); ++ default_term = i; ++ ++ goto end; ++ } ++ } ++ } ++ ++ /* Prompt the user, once per sec. */ ++ if ((time1 = getrtsecs ()) != time2 && time1 != 0xFF) ++ { ++ if (! no_message) ++ { ++ /* Need to set CURRENT_TERM to each of selected ++ terminals. */ ++ for (i = 0; term_table[i].name; i++) ++ if (term_bitmap & (1 << i)) ++ { ++ current_term = term_table + i; ++ grub_printf ("\rPress any key to continue.\n"); ++ } ++ ++ /* Restore CURRENT_TERM. */ ++ current_term = prev_term; ++ } ++ ++ time2 = time1; ++ if (to > 0) ++ to--; ++ } ++ } ++ } ++ ++ 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; ++ ++ /* If the interface is currently the command-line, ++ restart it to repaint the screen. */ ++ if (current_term != prev_term && (flags & BUILTIN_CMDLINE)) ++ grub_longjmp (restart_cmdline_env, 0); ++ ++ return 0; ++} ++ ++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]", ++ "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" ++ " argument is specified, print current setting. The option --dumb" ++ " specifies that your terminal is dumb, otherwise, vt100-compatibility" ++ " is assumed. If you specify --no-echo, input characters won't be echoed." ++ " If you specify --no-edit, the BASH-like editing feature will be disabled." ++ " If --timeout is present, this command will wait at most for SECS" ++ " seconds. The option --lines specifies the maximum number of lines." ++ " The option --silent is used to suppress messages." ++}; ++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ ++ ++ ++#ifdef SUPPORT_SERIAL ++static int ++terminfo_func (char *arg, int flags) ++{ ++ struct terminfo term; ++ ++ if (*arg) ++ { ++ struct ++ { ++ const char *name; ++ char *var; ++ } ++ options[] = ++ { ++ {"--name=", term.name}, ++ {"--cursor-address=", term.cursor_address}, ++ {"--clear-screen=", term.clear_screen}, ++ {"--enter-standout-mode=", term.enter_standout_mode}, ++ {"--exit-standout-mode=", term.exit_standout_mode} ++ }; ++ ++ grub_memset (&term, 0, sizeof (term)); ++ ++ while (*arg) ++ { ++ int i; ++ char *next = skip_to (0, arg); ++ ++ nul_terminate (arg); ++ ++ for (i = 0; i < sizeof (options) / sizeof (options[0]); i++) ++ { ++ const char *name = options[i].name; ++ int len = grub_strlen (name); ++ ++ if (! grub_memcmp (arg, name, len)) ++ { ++ grub_strcpy (options[i].var, ti_unescape_string (arg + len)); ++ break; ++ } ++ } ++ ++ if (i == sizeof (options) / sizeof (options[0])) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return errnum; ++ } ++ ++ arg = next; ++ } ++ ++ if (term.name[0] == 0 || term.cursor_address[0] == 0) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return errnum; ++ } ++ ++ ti_set_term (&term); ++ } ++ else ++ { ++ /* No option specifies printing out current settings. */ ++ ti_get_term (&term); ++ ++ grub_printf ("name=%s\n", ++ ti_escape_string (term.name)); ++ grub_printf ("cursor_address=%s\n", ++ ti_escape_string (term.cursor_address)); ++ grub_printf ("clear_screen=%s\n", ++ ti_escape_string (term.clear_screen)); ++ grub_printf ("enter_standout_mode=%s\n", ++ ti_escape_string (term.enter_standout_mode)); ++ grub_printf ("exit_standout_mode=%s\n", ++ ti_escape_string (term.exit_standout_mode)); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_terminfo = ++{ ++ "terminfo", ++ terminfo_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ]" ++ " [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]", ++ ++ "Define the capabilities of your terminal. Use this command to" ++ " define escape sequences, if it is not vt100-compatible." ++ " You may use \\e for ESC and ^X for a control character." ++ " If no option is specified, the current settings are printed." ++}; ++#endif /* SUPPORT_SERIAL */ ++ ++ ++/* testload */ ++static int ++testload_func (char *arg, int flags) ++{ ++ int i; ++ ++ kernel_type = KERNEL_TYPE_NONE; ++ ++ if (! grub_open (arg)) ++ return 1; ++ ++ disk_read_hook = disk_read_print_func; ++ ++ /* Perform filesystem test on the specified file. */ ++ /* Read whole file first. */ ++ grub_printf ("Whole file: "); ++ ++ grub_read ((char *) RAW_ADDR (0x100000), -1); ++ ++ /* Now compare two sections of the file read differently. */ ++ ++ for (i = 0; i < 0x10ac0; i++) ++ { ++ *((unsigned char *) RAW_ADDR (0x200000 + i)) = 0; ++ *((unsigned char *) RAW_ADDR (0x300000 + i)) = 1; ++ } ++ ++ /* First partial read. */ ++ grub_printf ("\nPartial read 1: "); ++ ++ grub_seek (0); ++ grub_read ((char *) RAW_ADDR (0x200000), 0x7); ++ grub_read ((char *) RAW_ADDR (0x200007), 0x100); ++ grub_read ((char *) RAW_ADDR (0x200107), 0x10); ++ grub_read ((char *) RAW_ADDR (0x200117), 0x999); ++ grub_read ((char *) RAW_ADDR (0x200ab0), 0x10); ++ grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000); ++ ++ /* Second partial read. */ ++ grub_printf ("\nPartial read 2: "); ++ ++ grub_seek (0); ++ grub_read ((char *) RAW_ADDR (0x300000), 0x10000); ++ grub_read ((char *) RAW_ADDR (0x310000), 0x10); ++ grub_read ((char *) RAW_ADDR (0x310010), 0x7); ++ grub_read ((char *) RAW_ADDR (0x310017), 0x10); ++ grub_read ((char *) RAW_ADDR (0x310027), 0x999); ++ grub_read ((char *) RAW_ADDR (0x3109c0), 0x100); ++ ++ grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n", ++ *((int *) RAW_ADDR (0x200000)), ++ *((int *) RAW_ADDR (0x200004)), ++ *((int *) RAW_ADDR (0x200008)), ++ *((int *) RAW_ADDR (0x20000c))); ++ ++ grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n", ++ *((int *) RAW_ADDR (0x300000)), ++ *((int *) RAW_ADDR (0x300004)), ++ *((int *) RAW_ADDR (0x300008)), ++ *((int *) RAW_ADDR (0x30000c))); ++ ++ for (i = 0; i < 0x10ac0; i++) ++ if (*((unsigned char *) RAW_ADDR (0x200000 + i)) ++ != *((unsigned char *) RAW_ADDR (0x300000 + i))) ++ break; ++ ++ grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos); ++ disk_read_hook = 0; ++ grub_close (); ++ return 0; ++} ++ ++static struct builtin builtin_testload = ++{ ++ "testload", ++ testload_func, ++ BUILTIN_CMDLINE, ++ "testload FILE", ++ "Read the entire contents of FILE in several different ways and" ++ " compares them, to test the filesystem code. The output is somewhat" ++ " cryptic, but if no errors are reported and the final `i=X," ++ " filepos=Y' reading has X and Y equal, then it is definitely" ++ " consistent, and very likely works correctly subject to a" ++ " consistent offset error. If this test succeeds, then a good next" ++ " step is to try loading a kernel." ++}; ++ ++ ++/* testvbe MODE */ ++static int ++testvbe_func (char *arg, int flags) ++{ ++ int mode_number; ++ struct vbe_controller controller; ++ struct vbe_mode mode; ++ ++ if (! *arg) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ if (! safe_parse_maxint (&arg, &mode_number)) ++ return 1; ++ ++ /* Preset `VBE2'. */ ++ grub_memmove (controller.signature, "VBE2", 4); ++ ++ /* Detect VBE BIOS. */ ++ if (get_vbe_controller_info (&controller) != 0x004F) ++ { ++ grub_printf (" VBE BIOS is not present.\n"); ++ return 0; ++ } ++ ++ if (controller.version < 0x0200) ++ { ++ grub_printf (" VBE version %d.%d is not supported.\n", ++ (int) (controller.version >> 8), ++ (int) (controller.version & 0xFF)); ++ return 0; ++ } ++ ++ if (get_vbe_mode_info (mode_number, &mode) != 0x004F ++ || (mode.mode_attributes & 0x0091) != 0x0091) ++ { ++ grub_printf (" Mode 0x%x is not supported.\n", mode_number); ++ return 0; ++ } ++ ++ /* Now trip to the graphics mode. */ ++ if (set_vbe_mode (mode_number | (1 << 14)) != 0x004F) ++ { ++ grub_printf (" Switching to Mode 0x%x failed.\n", mode_number); ++ return 0; ++ } ++ ++ /* Draw something on the screen... */ ++ { ++ unsigned char *base_buf = (unsigned char *) mode.phys_base; ++ int scanline = controller.version >= 0x0300 ++ ? mode.linear_bytes_per_scanline : mode.bytes_per_scanline; ++ /* FIXME: this assumes that any depth is a modulo of 8. */ ++ int bpp = mode.bits_per_pixel / 8; ++ int width = mode.x_resolution; ++ int height = mode.y_resolution; ++ int x, y; ++ unsigned color = 0; ++ ++ /* Iterate drawing on the screen, until the user hits any key. */ ++ while (checkkey () == -1) ++ { ++ for (y = 0; y < height; y++) ++ { ++ unsigned char *line_buf = base_buf + scanline * y; ++ ++ for (x = 0; x < width; x++) ++ { ++ unsigned char *buf = line_buf + bpp * x; ++ int i; ++ ++ for (i = 0; i < bpp; i++, buf++) ++ *buf = (color >> (i * 8)) & 0xff; ++ } ++ ++ color++; ++ } ++ } ++ ++ /* Discard the input. */ ++ getkey (); ++ } ++ ++ /* Back to the default text mode. */ ++ if (set_vbe_mode (0x03) != 0x004F) ++ { ++ /* Why?! */ ++ grub_reboot (); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_testvbe = ++{ ++ "testvbe", ++ testvbe_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "testvbe MODE", ++ "Test the VBE mode MODE. Hit any key to return." ++}; ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* tftpserver */ ++static int ++tftpserver_func (char *arg, int flags) ++{ ++ if (! *arg || ! ifconfig (0, 0, 0, arg)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ print_network_configuration (); ++ return 0; ++} ++ ++static struct builtin builtin_tftpserver = ++{ ++ "tftpserver", ++ tftpserver_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "tftpserver IPADDR", ++ "Override the TFTP server address." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++/* timeout */ ++static int ++timeout_func (char *arg, int flags) ++{ ++ if (! safe_parse_maxint (&arg, &grub_timeout)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_timeout = ++{ ++ "timeout", ++ timeout_func, ++ BUILTIN_MENU, ++#if 0 ++ "timeout SEC", ++ "Set a timeout, in SEC seconds, before automatically booting the" ++ " default entry (normally the first entry defined)." ++#endif ++}; ++ ++ ++/* title */ ++static int ++title_func (char *arg, int flags) ++{ ++ /* This function is not actually used at least currently. */ ++ return 0; ++} ++ ++static struct builtin builtin_title = ++{ ++ "title", ++ title_func, ++ BUILTIN_TITLE, ++#if 0 ++ "title [NAME ...]", ++ "Start a new boot entry, and set its name to the contents of the" ++ " rest of the line, starting with the first non-space character." ++#endif ++}; ++ ++ ++/* unhide */ ++static int ++unhide_func (char *arg, int flags) ++{ ++ if (! set_device (arg)) ++ return 1; ++ ++ if (! set_partition_hidden_flag (0)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_unhide = ++{ ++ "unhide", ++ unhide_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "unhide PARTITION", ++ "Unhide PARTITION by clearing the \"hidden\" bit in its" ++ " partition type code." ++}; ++ ++ ++/* uppermem */ ++static int ++uppermem_func (char *arg, int flags) ++{ ++ if (! safe_parse_maxint (&arg, (int *) &mbi.mem_upper)) ++ return 1; ++ ++ mbi.flags &= ~MB_INFO_MEM_MAP; ++ return 0; ++} ++ ++static struct builtin builtin_uppermem = ++{ ++ "uppermem", ++ uppermem_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "uppermem KBYTES", ++ "Force GRUB to assume that only KBYTES kilobytes of upper memory are" ++ " installed. Any system address range maps are discarded." ++}; ++ ++ ++/* vbeprobe */ ++static int ++vbeprobe_func (char *arg, int flags) ++{ ++ struct vbe_controller controller; ++ unsigned short *mode_list; ++ int mode_number = -1; ++ ++ auto unsigned long vbe_far_ptr_to_linear (unsigned long); ++ ++ unsigned long vbe_far_ptr_to_linear (unsigned long ptr) ++ { ++ unsigned short seg = (ptr >> 16); ++ unsigned short off = (ptr & 0xFFFF); ++ ++ return (seg << 4) + off; ++ } ++ ++ if (*arg) ++ { ++ if (! safe_parse_maxint (&arg, &mode_number)) ++ return 1; ++ } ++ ++ /* Set the signature to `VBE2', to obtain VBE 3.0 information. */ ++ grub_memmove (controller.signature, "VBE2", 4); ++ ++ if (get_vbe_controller_info (&controller) != 0x004F) ++ { ++ grub_printf (" VBE BIOS is not present.\n"); ++ return 0; ++ } ++ ++ /* Check the version. */ ++ if (controller.version < 0x0200) ++ { ++ grub_printf (" VBE version %d.%d is not supported.\n", ++ (int) (controller.version >> 8), ++ (int) (controller.version & 0xFF)); ++ return 0; ++ } ++ ++ /* Print some information. */ ++ grub_printf (" VBE version %d.%d\n", ++ (int) (controller.version >> 8), ++ (int) (controller.version & 0xFF)); ++ ++ /* Iterate probing modes. */ ++ for (mode_list ++ = (unsigned short *) vbe_far_ptr_to_linear (controller.video_mode); ++ *mode_list != 0xFFFF; ++ mode_list++) ++ { ++ struct vbe_mode mode; ++ ++ if (get_vbe_mode_info (*mode_list, &mode) != 0x004F) ++ continue; ++ ++ /* Skip this, if this is not supported or linear frame buffer ++ mode is not support. */ ++ if ((mode.mode_attributes & 0x0081) != 0x0081) ++ continue; ++ ++ if (mode_number == -1 || mode_number == *mode_list) ++ { ++ char *model; ++ switch (mode.memory_model) ++ { ++ case 0x00: model = "Text"; break; ++ case 0x01: model = "CGA graphics"; break; ++ case 0x02: model = "Hercules graphics"; break; ++ case 0x03: model = "Planar"; break; ++ case 0x04: model = "Packed pixel"; break; ++ case 0x05: model = "Non-chain 4, 256 color"; break; ++ case 0x06: model = "Direct Color"; break; ++ case 0x07: model = "YUV"; break; ++ default: model = "Unknown"; break; ++ } ++ ++ grub_printf (" 0x%x: %s, %ux%ux%u\n", ++ (unsigned) *mode_list, ++ model, ++ (unsigned) mode.x_resolution, ++ (unsigned) mode.y_resolution, ++ (unsigned) mode.bits_per_pixel); ++ ++ if (mode_number != -1) ++ break; ++ } ++ } ++ ++ if (mode_number != -1 && mode_number != *mode_list) ++ grub_printf (" Mode 0x%x is not found or supported.\n", mode_number); ++ ++ return 0; ++} ++ ++static struct builtin builtin_vbeprobe = ++{ ++ "vbeprobe", ++ vbeprobe_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "vbeprobe [MODE]", ++ "Probe VBE information. If the mode number MODE is specified, show only" ++ " the information about only the mode." ++}; ++ ++ ++/* The table of builtin commands. Sorted in dictionary order. */ ++struct builtin *builtin_table[] = ++{ ++ &builtin_blocklist, ++ &builtin_boot, ++#ifdef SUPPORT_NETBOOT ++ &builtin_bootp, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_cat, ++ &builtin_chainloader, ++ &builtin_cmp, ++ &builtin_color, ++ &builtin_configfile, ++ &builtin_debug, ++ &builtin_default, ++#ifdef GRUB_UTIL ++ &builtin_device, ++#endif /* GRUB_UTIL */ ++#ifdef SUPPORT_NETBOOT ++ &builtin_dhcp, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_displayapm, ++ &builtin_displaymem, ++#ifdef GRUB_UTIL ++ &builtin_dump, ++#endif /* GRUB_UTIL */ ++ &builtin_embed, ++ &builtin_fallback, ++ &builtin_find, ++ &builtin_fstest, ++ &builtin_geometry, ++ &builtin_halt, ++ &builtin_help, ++ &builtin_hiddenmenu, ++ &builtin_hide, ++#ifdef SUPPORT_NETBOOT ++ &builtin_ifconfig, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_impsprobe, ++ &builtin_initrd, ++ &builtin_install, ++ &builtin_ioprobe, ++ &builtin_kernel, ++ &builtin_lock, ++ &builtin_makeactive, ++ &builtin_map, ++#ifdef USE_MD5_PASSWORDS ++ &builtin_md5crypt, ++#endif /* USE_MD5_PASSWORDS */ ++ &builtin_module, ++ &builtin_modulenounzip, ++ &builtin_pager, ++ &builtin_partnew, ++ &builtin_parttype, ++ &builtin_password, ++ &builtin_pause, ++#ifdef GRUB_UTIL ++ &builtin_quit, ++#endif /* GRUB_UTIL */ ++#ifdef SUPPORT_NETBOOT ++ &builtin_rarp, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_read, ++ &builtin_reboot, ++ &builtin_root, ++ &builtin_rootnoverify, ++ &builtin_savedefault, ++#ifdef SUPPORT_SERIAL ++ &builtin_serial, ++#endif /* SUPPORT_SERIAL */ ++ &builtin_setkey, ++ &builtin_setup, ++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) ++ &builtin_terminal, ++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ ++#ifdef SUPPORT_SERIAL ++ &builtin_terminfo, ++#endif /* SUPPORT_SERIAL */ ++ &builtin_testload, ++ &builtin_testvbe, ++#ifdef SUPPORT_NETBOOT ++ &builtin_tftpserver, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_timeout, ++ &builtin_title, ++ &builtin_unhide, ++ &builtin_uppermem, ++ &builtin_vbeprobe, ++ 0 ++}; +diff -Nur grub-0.97/stage2/char_io.c grub-0.97-patched/stage2/char_io.c +--- grub-0.97/stage2/char_io.c 2005-02-01 21:51:23.000000000 +0100 ++++ grub-0.97-patched/stage2/char_io.c 2012-11-11 17:06:52.556085241 +0100 +@@ -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 (); +@@ -1174,37 +1202,62 @@ + } + #endif /* ! STAGE1_5 */ + ++#ifdef GRUB_UTIL ++# ifdef __PIC__ ++# if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL) ++ extern char start[]; ++ extern char end[]; ++# elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL) ++ extern char _start[]; ++ extern char _end[]; ++# endif ++# endif ++#endif + int +-memcheck (int addr, int len) ++memcheck (unsigned long addr, unsigned long len) + { + #ifdef GRUB_UTIL +- auto int start_addr (void); +- auto int end_addr (void); ++# ifdef __PIC__ ++# if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL) ++ if (start <= addr && end > addr + len) ++ return ! errnum; ++# elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL) ++ if (_start <= addr && _end > addr + len) ++ return ! errnum; ++# endif ++# else /* __PIC__ */ ++ auto unsigned long start_addr (void); ++ auto unsigned long end_addr (void); + +- auto int start_addr (void) ++ auto unsigned long start_addr (void) + { +- int ret; +-# if defined(HAVE_START_SYMBOL) ++ unsigned long ret; ++# if defined(HAVE_START_SYMBOL) + asm volatile ("movl $start, %0" : "=a" (ret)); +-# elif defined(HAVE_USCORE_START_SYMBOL) ++# elif defined(HAVE_USCORE_START_SYMBOL) + asm volatile ("movl $_start, %0" : "=a" (ret)); +-# endif ++# else ++ erk! /* function would return undefined data in this case - barf */ ++# endif + return ret; + } + +- auto int end_addr (void) ++ auto unsigned long end_addr (void) + { +- int ret; +-# if defined(HAVE_END_SYMBOL) ++ unsigned long ret; ++# if defined(HAVE_END_SYMBOL) + asm volatile ("movl $end, %0" : "=a" (ret)); +-# elif defined(HAVE_USCORE_END_SYMBOL) ++# elif defined(HAVE_USCORE_END_SYMBOL) + asm volatile ("movl $_end, %0" : "=a" (ret)); +-# endif ++# else ++ erk! /* function would return undefined data in this case - barf */ ++# endif + return ret; + } + + if (start_addr () <= addr && end_addr () > addr + len) + return ! errnum; ++# endif /* __PIC__ */ + #endif /* GRUB_UTIL */ + + if ((addr < RAW_ADDR (0x1000)) +@@ -1217,10 +1270,20 @@ + 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) + { +- 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 +1321,7 @@ + { + char *p = start; + +- if (memcheck ((int) start, len)) ++ if (memcheck ((unsigned long) start, len)) + { + while (len -- > 0) + *p ++ = c; +diff -Nur grub-0.97/stage2/char_io.c.orig grub-0.97-patched/stage2/char_io.c.orig +--- grub-0.97/stage2/char_io.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/char_io.c.orig 2005-02-01 21:51:23.000000000 +0100 +@@ -0,0 +1,1283 @@ ++/* char_io.c - basic console input and output */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,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. ++ */ ++ ++#include ++#include ++ ++#ifdef SUPPORT_HERCULES ++# include ++#endif ++ ++#ifdef SUPPORT_SERIAL ++# include ++#endif ++ ++#ifndef STAGE1_5 ++struct term_entry term_table[] = ++ { ++ { ++ "console", ++ 0, ++ console_putchar, ++ console_checkkey, ++ console_getkey, ++ console_getxy, ++ console_gotoxy, ++ console_cls, ++ console_setcolorstate, ++ console_setcolor, ++ console_setcursor ++ }, ++#ifdef SUPPORT_SERIAL ++ { ++ "serial", ++ /* A serial device must be initialized. */ ++ TERM_NEED_INIT, ++ serial_putchar, ++ serial_checkkey, ++ serial_getkey, ++ serial_getxy, ++ serial_gotoxy, ++ serial_cls, ++ serial_setcolorstate, ++ 0, ++ 0 ++ }, ++#endif /* SUPPORT_SERIAL */ ++#ifdef SUPPORT_HERCULES ++ { ++ "hercules", ++ 0, ++ hercules_putchar, ++ console_checkkey, ++ console_getkey, ++ hercules_getxy, ++ hercules_gotoxy, ++ hercules_cls, ++ hercules_setcolorstate, ++ hercules_setcolor, ++ hercules_setcursor ++ }, ++#endif /* SUPPORT_HERCULES */ ++ /* This must be the last entry. */ ++ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ++ }; ++ ++/* This must be console. */ ++struct term_entry *current_term = term_table; ++ ++int max_lines = 24; ++int count_lines = -1; ++int use_pager = 1; ++#endif ++ ++void ++print_error (void) ++{ ++ if (errnum > ERR_NONE && errnum < MAX_ERR_NUM) ++#ifndef STAGE1_5 ++ /* printf("\7\n %s\n", err_list[errnum]); */ ++ printf ("\nError %u: %s\n", errnum, err_list[errnum]); ++#else /* STAGE1_5 */ ++ printf ("Error %u\n", errnum); ++#endif /* STAGE1_5 */ ++} ++ ++char * ++convert_to_ascii (char *buf, int c,...) ++{ ++ unsigned long num = *((&c) + 1), mult = 10; ++ char *ptr = buf; ++ ++#ifndef STAGE1_5 ++ if (c == 'x' || c == 'X') ++ mult = 16; ++ ++ if ((num & 0x80000000uL) && c == 'd') ++ { ++ num = (~num) + 1; ++ *(ptr++) = '-'; ++ buf++; ++ } ++#endif ++ ++ do ++ { ++ int dig = num % mult; ++ *(ptr++) = ((dig > 9) ? dig + 'a' - 10 : '0' + dig); ++ } ++ while (num /= mult); ++ ++ /* reorder to correct direction!! */ ++ { ++ char *ptr1 = ptr - 1; ++ char *ptr2 = buf; ++ while (ptr1 > ptr2) ++ { ++ int tmp = *ptr1; ++ *ptr1 = *ptr2; ++ *ptr2 = tmp; ++ ptr1--; ++ ptr2++; ++ } ++ } ++ ++ return ptr; ++} ++ ++void ++grub_putstr (const char *str) ++{ ++ while (*str) ++ grub_putchar (*str++); ++} ++ ++void ++grub_printf (const char *format,...) ++{ ++ 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; ++ ++ case 's': ++ grub_putstr ((char *) *(dataptr++)); ++ break; ++#endif ++ } ++ } ++} ++ ++#ifndef STAGE1_5 ++int ++grub_sprintf (char *buffer, const char *format, ...) ++{ ++ /* 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; ++ ++ while (*ptr) ++ *bp++ = *(ptr++); /* putchar(*(ptr++)); */ ++ break; ++ ++ case 'c': *bp++ = (*(dataptr++))&0xff; ++ /* putchar((*(dataptr++))&0xff); */ ++ break; ++ ++ case 's': ++ ptr = (char *) (*(dataptr++)); ++ ++ while ((c = *ptr++) != 0) ++ *bp++ = c; /* putchar(c); */ ++ break; ++ } ++ } ++ ++ *bp = 0; ++ return bp - buffer; ++} ++ ++ ++void ++init_page (void) ++{ ++ cls (); ++ ++ grub_printf ("\n GNU GRUB version %s (%dK lower / %dK upper memory)\n\n", ++ version_string, mbi.mem_lower, mbi.mem_upper); ++} ++ ++/* The number of the history entries. */ ++static int num_history = 0; ++ ++/* Get the NOth history. If NO is less than zero or greater than or ++ equal to NUM_HISTORY, return NULL. Otherwise return a valid string. */ ++static char * ++get_history (int no) ++{ ++ if (no < 0 || no >= num_history) ++ return 0; ++ ++ return (char *) HISTORY_BUF + MAX_CMDLINE * no; ++} ++ ++/* Add CMDLINE to the history buffer. */ ++static void ++add_history (const char *cmdline, int no) ++{ ++ grub_memmove ((char *) HISTORY_BUF + MAX_CMDLINE * (no + 1), ++ (char *) HISTORY_BUF + MAX_CMDLINE * no, ++ MAX_CMDLINE * (num_history - no)); ++ grub_strcpy ((char *) HISTORY_BUF + MAX_CMDLINE * no, cmdline); ++ if (num_history < HISTORY_SIZE) ++ num_history++; ++} ++ ++static int ++real_get_cmdline (char *prompt, char *cmdline, int maxlen, ++ int echo_char, int readline) ++{ ++ /* This is a rather complicated function. So explain the concept. ++ ++ A command-line consists of ``section''s. A section is a part of the ++ line which may be displayed on the screen, but a section is never ++ displayed with another section simultaneously. ++ ++ Each section is basically 77 or less characters, but the exception ++ is the first section, which is 78 or less characters, because the ++ starting point is special. See below. ++ ++ The first section contains a prompt and a command-line (or the ++ first part of a command-line when it is too long to be fit in the ++ screen). So, in the first section, the number of command-line ++ characters displayed is 78 minus the length of the prompt (or ++ less). If the command-line has more characters, `>' is put at the ++ position 78 (zero-origin), to inform the user of the hidden ++ characters. ++ ++ Other sections always have `<' at the first position, since there ++ is absolutely a section before each section. If there is a section ++ after another section, this section consists of 77 characters and ++ `>' at the last position. The last section has 77 or less ++ characters and doesn't have `>'. ++ ++ Each section other than the last shares some characters with the ++ previous section. This region is called ``margin''. If the cursor ++ is put at the magin which is shared by the first section and the ++ second, the first section is displayed. Otherwise, a displayed ++ section is switched to another section, only if the cursor is put ++ outside that section. */ ++ ++ /* XXX: These should be defined in shared.h, but I leave these here, ++ until this code is freezed. */ ++#define CMDLINE_WIDTH 78 ++#define CMDLINE_MARGIN 10 ++ ++ int xpos, lpos, c, section; ++ /* The length of PROMPT. */ ++ int plen; ++ /* The length of the command-line. */ ++ int llen; ++ /* The index for the history. */ ++ int history = -1; ++ /* The working buffer for the command-line. */ ++ char *buf = (char *) CMDLINE_BUF; ++ /* The kill buffer. */ ++ char *kill_buf = (char *) KILL_BUF; ++ ++ /* Nested function definitions for code simplicity. */ ++ ++ /* The forward declarations of nested functions are prefixed ++ with `auto'. */ ++ auto void cl_refresh (int full, int len); ++ auto void cl_backward (int count); ++ auto void cl_forward (int count); ++ auto void cl_insert (const char *str); ++ auto void cl_delete (int count); ++ auto void cl_init (void); ++ ++ /* Move the cursor backward. */ ++ void cl_backward (int count) ++ { ++ lpos -= count; ++ ++ /* If the cursor is in the first section, display the first section ++ instead of the second. */ ++ if (section == 1 && plen + lpos < CMDLINE_WIDTH) ++ cl_refresh (1, 0); ++ else if (xpos - count < 1) ++ cl_refresh (1, 0); ++ else ++ { ++ xpos -= count; ++ ++ if (current_term->flags & TERM_DUMB) ++ { ++ int i; ++ ++ for (i = 0; i < count; i++) ++ grub_putchar ('\b'); ++ } ++ else ++ gotoxy (xpos, getxy () & 0xFF); ++ } ++ } ++ ++ /* Move the cursor forward. */ ++ void cl_forward (int count) ++ { ++ lpos += count; ++ ++ /* If the cursor goes outside, scroll the screen to the right. */ ++ if (xpos + count >= CMDLINE_WIDTH) ++ cl_refresh (1, 0); ++ else ++ { ++ xpos += count; ++ ++ if (current_term->flags & TERM_DUMB) ++ { ++ int i; ++ ++ for (i = lpos - count; i < lpos; i++) ++ { ++ if (! echo_char) ++ grub_putchar (buf[i]); ++ else ++ grub_putchar (echo_char); ++ } ++ } ++ else ++ gotoxy (xpos, getxy () & 0xFF); ++ } ++ } ++ ++ /* Refresh the screen. If FULL is true, redraw the full line, otherwise, ++ only LEN characters from LPOS. */ ++ void cl_refresh (int full, int len) ++ { ++ int i; ++ int start; ++ int pos = xpos; ++ ++ if (full) ++ { ++ /* Recompute the section number. */ ++ if (lpos + plen < CMDLINE_WIDTH) ++ section = 0; ++ else ++ section = ((lpos + plen - CMDLINE_WIDTH) ++ / (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) + 1); ++ ++ /* From the start to the end. */ ++ len = CMDLINE_WIDTH; ++ pos = 0; ++ grub_putchar ('\r'); ++ ++ /* If SECTION is the first section, print the prompt, otherwise, ++ print `<'. */ ++ if (section == 0) ++ { ++ grub_printf ("%s", prompt); ++ len -= plen; ++ pos += plen; ++ } ++ else ++ { ++ grub_putchar ('<'); ++ len--; ++ pos++; ++ } ++ } ++ ++ /* Compute the index to start writing BUF and the resulting position ++ on the screen. */ ++ if (section == 0) ++ { ++ int offset = 0; ++ ++ if (! full) ++ offset = xpos - plen; ++ ++ start = 0; ++ xpos = lpos + plen; ++ start += offset; ++ } ++ else ++ { ++ int offset = 0; ++ ++ if (! full) ++ offset = xpos - 1; ++ ++ start = ((section - 1) * (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) ++ + CMDLINE_WIDTH - plen - CMDLINE_MARGIN); ++ xpos = lpos + 1 - start; ++ start += offset; ++ } ++ ++ /* Print BUF. If ECHO_CHAR is not zero, put it instead. */ ++ for (i = start; i < start + len && i < llen; i++) ++ { ++ if (! echo_char) ++ grub_putchar (buf[i]); ++ else ++ grub_putchar (echo_char); ++ ++ pos++; ++ } ++ ++ /* Fill up the rest of the line with spaces. */ ++ for (; i < start + len; i++) ++ { ++ grub_putchar (' '); ++ pos++; ++ } ++ ++ /* If the cursor is at the last position, put `>' or a space, ++ depending on if there are more characters in BUF. */ ++ if (pos == CMDLINE_WIDTH) ++ { ++ if (start + len < llen) ++ grub_putchar ('>'); ++ else ++ grub_putchar (' '); ++ ++ pos++; ++ } ++ ++ /* Back to XPOS. */ ++ if (current_term->flags & TERM_DUMB) ++ { ++ for (i = 0; i < pos - xpos; i++) ++ grub_putchar ('\b'); ++ } ++ else ++ gotoxy (xpos, getxy () & 0xFF); ++ } ++ ++ /* Initialize the command-line. */ ++ void cl_init (void) ++ { ++ /* Distinguish us from other lines and error messages! */ ++ grub_putchar ('\n'); ++ ++ /* Print full line and set position here. */ ++ cl_refresh (1, 0); ++ } ++ ++ /* Insert STR to BUF. */ ++ void cl_insert (const char *str) ++ { ++ int l = grub_strlen (str); ++ ++ if (llen + l < maxlen) ++ { ++ if (lpos == llen) ++ grub_memmove (buf + lpos, str, l + 1); ++ else ++ { ++ grub_memmove (buf + lpos + l, buf + lpos, llen - lpos + 1); ++ grub_memmove (buf + lpos, str, l); ++ } ++ ++ llen += l; ++ lpos += l; ++ if (xpos + l >= CMDLINE_WIDTH) ++ cl_refresh (1, 0); ++ else if (xpos + l + llen - lpos > CMDLINE_WIDTH) ++ cl_refresh (0, CMDLINE_WIDTH - xpos); ++ else ++ cl_refresh (0, l + llen - lpos); ++ } ++ } ++ ++ /* Delete COUNT characters in BUF. */ ++ void cl_delete (int count) ++ { ++ grub_memmove (buf + lpos, buf + lpos + count, llen - count + 1); ++ llen -= count; ++ ++ if (xpos + llen + count - lpos > CMDLINE_WIDTH) ++ cl_refresh (0, CMDLINE_WIDTH - xpos); ++ else ++ cl_refresh (0, llen + count - lpos); ++ } ++ ++ plen = grub_strlen (prompt); ++ llen = grub_strlen (cmdline); ++ ++ if (maxlen > MAX_CMDLINE) ++ { ++ maxlen = MAX_CMDLINE; ++ if (llen >= MAX_CMDLINE) ++ { ++ llen = MAX_CMDLINE - 1; ++ cmdline[MAX_CMDLINE] = 0; ++ } ++ } ++ lpos = llen; ++ grub_strcpy (buf, cmdline); ++ ++ cl_init (); ++ ++ while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r') ++ { ++ /* If READLINE is non-zero, handle readline-like key bindings. */ ++ if (readline) ++ { ++ switch (c) ++ { ++ case 9: /* TAB lists completions */ ++ { ++ int i; ++ /* POS points to the first space after a command. */ ++ int pos = 0; ++ int ret; ++ char *completion_buffer = (char *) COMPLETION_BUF; ++ int equal_pos = -1; ++ int is_filename; ++ ++ /* Find the first word. */ ++ while (buf[pos] == ' ') ++ pos++; ++ while (buf[pos] && buf[pos] != '=' && buf[pos] != ' ') ++ pos++; ++ ++ is_filename = (lpos > pos); ++ ++ /* Find the position of the equal character after a ++ command, and replace it with a space. */ ++ for (i = pos; buf[i] && buf[i] != ' '; i++) ++ if (buf[i] == '=') ++ { ++ equal_pos = i; ++ buf[i] = ' '; ++ break; ++ } ++ ++ /* Find the position of the first character in this ++ word. */ ++ for (i = lpos; i > 0 && buf[i - 1] != ' '; i--) ++ ; ++ ++ /* Invalidate the cache, because the user may exchange ++ removable disks. */ ++ buf_drive = -1; ++ ++ /* Copy this word to COMPLETION_BUFFER and do the ++ completion. */ ++ grub_memmove (completion_buffer, buf + i, lpos - i); ++ completion_buffer[lpos - i] = 0; ++ ret = print_completions (is_filename, 1); ++ errnum = ERR_NONE; ++ ++ if (ret >= 0) ++ { ++ /* Found, so insert COMPLETION_BUFFER. */ ++ cl_insert (completion_buffer + lpos - i); ++ ++ if (ret > 0) ++ { ++ /* There are more than one candidates, so print ++ the list. */ ++ grub_putchar ('\n'); ++ print_completions (is_filename, 0); ++ errnum = ERR_NONE; ++ } ++ } ++ ++ /* Restore the command-line. */ ++ if (equal_pos >= 0) ++ buf[equal_pos] = '='; ++ ++ if (ret) ++ cl_init (); ++ } ++ break; ++ case 1: /* C-a go to beginning of line */ ++ cl_backward (lpos); ++ break; ++ case 5: /* C-e go to end of line */ ++ cl_forward (llen - lpos); ++ break; ++ case 6: /* C-f forward one character */ ++ if (lpos < llen) ++ cl_forward (1); ++ break; ++ case 2: /* C-b backward one character */ ++ if (lpos > 0) ++ cl_backward (1); ++ break; ++ case 21: /* C-u kill to beginning of line */ ++ if (lpos == 0) ++ break; ++ /* Copy the string being deleted to KILL_BUF. */ ++ grub_memmove (kill_buf, buf, lpos); ++ kill_buf[lpos] = 0; ++ { ++ /* XXX: Not very clever. */ ++ ++ int count = lpos; ++ ++ cl_backward (lpos); ++ cl_delete (count); ++ } ++ break; ++ case 11: /* C-k kill to end of line */ ++ if (lpos == llen) ++ break; ++ /* Copy the string being deleted to KILL_BUF. */ ++ grub_memmove (kill_buf, buf + lpos, llen - lpos + 1); ++ cl_delete (llen - lpos); ++ break; ++ case 25: /* C-y yank the kill buffer */ ++ cl_insert (kill_buf); ++ break; ++ case 16: /* C-p fetch the previous command */ ++ { ++ char *p; ++ ++ if (history < 0) ++ /* Save the working buffer. */ ++ grub_strcpy (cmdline, buf); ++ else if (grub_strcmp (get_history (history), buf) != 0) ++ /* If BUF is modified, add it into the history list. */ ++ add_history (buf, history); ++ ++ history++; ++ p = get_history (history); ++ if (! p) ++ { ++ history--; ++ break; ++ } ++ ++ grub_strcpy (buf, p); ++ llen = grub_strlen (buf); ++ lpos = llen; ++ cl_refresh (1, 0); ++ } ++ break; ++ case 14: /* C-n fetch the next command */ ++ { ++ char *p; ++ ++ if (history < 0) ++ { ++ break; ++ } ++ else if (grub_strcmp (get_history (history), buf) != 0) ++ /* If BUF is modified, add it into the history list. */ ++ add_history (buf, history); ++ ++ history--; ++ p = get_history (history); ++ if (! p) ++ p = cmdline; ++ ++ grub_strcpy (buf, p); ++ llen = grub_strlen (buf); ++ lpos = llen; ++ cl_refresh (1, 0); ++ } ++ break; ++ } ++ } ++ ++ /* ESC, C-d and C-h are always handled. Actually C-d is not ++ functional if READLINE is zero, as the cursor cannot go ++ backward, but that's ok. */ ++ switch (c) ++ { ++ case 27: /* ESC immediately return 1 */ ++ return 1; ++ case 4: /* C-d delete character under cursor */ ++ if (lpos == llen) ++ break; ++ cl_delete (1); ++ break; ++ case 8: /* C-h backspace */ ++# ifdef GRUB_UTIL ++ case 127: /* also backspace */ ++# endif ++ if (lpos > 0) ++ { ++ cl_backward (1); ++ cl_delete (1); ++ } ++ break; ++ default: /* insert printable character into line */ ++ if (c >= ' ' && c <= '~') ++ { ++ char str[2]; ++ ++ str[0] = c; ++ str[1] = 0; ++ cl_insert (str); ++ } ++ } ++ } ++ ++ grub_putchar ('\n'); ++ ++ /* If ECHO_CHAR is NUL, remove the leading spaces. */ ++ lpos = 0; ++ if (! echo_char) ++ while (buf[lpos] == ' ') ++ lpos++; ++ ++ /* Copy the working buffer to CMDLINE. */ ++ grub_memmove (cmdline, buf + lpos, llen - lpos + 1); ++ ++ /* If the readline-like feature is turned on and CMDLINE is not ++ empty, add it into the history list. */ ++ if (readline && lpos < llen) ++ add_history (cmdline, 0); ++ ++ return 0; ++} ++ ++/* Don't use this with a MAXLEN greater than 1600 or so! The problem ++ is that GET_CMDLINE depends on the everything fitting on the screen ++ at once. So, the whole screen is about 2000 characters, minus the ++ PROMPT, and space for error and status lines, etc. MAXLEN must be ++ at least 1, and PROMPT and CMDLINE must be valid strings (not NULL ++ or zero-length). ++ ++ If ECHO_CHAR is nonzero, echo it instead of the typed character. */ ++int ++get_cmdline (char *prompt, char *cmdline, int maxlen, ++ int echo_char, int readline) ++{ ++ int old_cursor; ++ int ret; ++ ++ old_cursor = setcursor (1); ++ ++ /* Because it is hard to deal with different conditions simultaneously, ++ less functional cases are handled here. Assume that TERM_NO_ECHO ++ implies TERM_NO_EDIT. */ ++ if (current_term->flags & (TERM_NO_ECHO | TERM_NO_EDIT)) ++ { ++ char *p = cmdline; ++ int c; ++ ++ /* Make sure that MAXLEN is not too large. */ ++ if (maxlen > MAX_CMDLINE) ++ maxlen = MAX_CMDLINE; ++ ++ /* Print only the prompt. The contents of CMDLINE is simply discarded, ++ even if it is not empty. */ ++ grub_printf ("%s", prompt); ++ ++ /* Gather characters until a newline is gotten. */ ++ while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r') ++ { ++ /* Return immediately if ESC is pressed. */ ++ if (c == 27) ++ { ++ setcursor (old_cursor); ++ return 1; ++ } ++ ++ /* Printable characters are added into CMDLINE. */ ++ if (c >= ' ' && c <= '~') ++ { ++ if (! (current_term->flags & TERM_NO_ECHO)) ++ grub_putchar (c); ++ ++ /* Preceding space characters must be ignored. */ ++ if (c != ' ' || p != cmdline) ++ *p++ = c; ++ } ++ } ++ ++ *p = 0; ++ ++ if (! (current_term->flags & TERM_NO_ECHO)) ++ grub_putchar ('\n'); ++ ++ setcursor (old_cursor); ++ return 0; ++ } ++ ++ /* Complicated features are left to real_get_cmdline. */ ++ ret = real_get_cmdline (prompt, cmdline, maxlen, echo_char, readline); ++ setcursor (old_cursor); ++ return ret; ++} ++ ++int ++safe_parse_maxint (char **str_ptr, int *myint_ptr) ++{ ++ char *ptr = *str_ptr; ++ int myint = 0; ++ 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 (myint > ((MAXINT - digit) / mult)) ++ { ++ errnum = ERR_NUMBER_OVERFLOW; ++ return 0; ++ } ++ myint = (myint * mult) + digit; ++ ptr++; ++ } ++ ++ if (!found) ++ { ++ errnum = ERR_NUMBER_PARSING; ++ return 0; ++ } ++ ++ *str_ptr = ptr; ++ *myint_ptr = myint; ++ ++ return 1; ++} ++#endif /* STAGE1_5 */ ++ ++#if !defined(STAGE1_5) || defined(FSYS_FAT) ++int ++grub_tolower (int c) ++{ ++ if (c >= 'A' && c <= 'Z') ++ return (c + ('a' - 'A')); ++ ++ return c; ++} ++#endif /* ! STAGE1_5 || FSYS_FAT */ ++ ++int ++grub_isspace (int c) ++{ ++ switch (c) ++ { ++ case ' ': ++ case '\t': ++ case '\r': ++ case '\n': ++ return 1; ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++#if !defined(STAGE1_5) || defined(FSYS_ISO9660) ++int ++grub_memcmp (const char *s1, const char *s2, int n) ++{ ++ while (n) ++ { ++ if (*s1 < *s2) ++ return -1; ++ else if (*s1 > *s2) ++ return 1; ++ s1++; ++ s2++; ++ n--; ++ } ++ ++ return 0; ++} ++#endif /* ! STAGE1_5 || FSYS_ISO9660 */ ++ ++#ifndef STAGE1_5 ++int ++grub_strncat (char *s1, const char *s2, int n) ++{ ++ int i = -1; ++ ++ while (++i < n && s1[i] != 0); ++ ++ while (i < n && (s1[i++] = *(s2++)) != 0); ++ ++ s1[n - 1] = 0; ++ ++ if (i >= n) ++ return 0; ++ ++ s1[i] = 0; ++ ++ return 1; ++} ++#endif /* ! STAGE1_5 */ ++ ++/* XXX: This below is an evil hack. Certainly, we should change the ++ strategy to determine what should be defined and what shouldn't be ++ defined for each image. For example, it would be better to create ++ a static library supporting minimal standard C functions and link ++ each image with the library. Complicated things should be left to ++ computer, definitely. -okuji */ ++#if !defined(STAGE1_5) || defined(FSYS_VSTAFS) ++int ++grub_strcmp (const char *s1, const char *s2) ++{ ++ while (*s1 || *s2) ++ { ++ if (*s1 < *s2) ++ return -1; ++ else if (*s1 > *s2) ++ return 1; ++ s1 ++; ++ s2 ++; ++ } ++ ++ return 0; ++} ++#endif /* ! STAGE1_5 || FSYS_VSTAFS */ ++ ++#ifndef STAGE1_5 ++/* Wait for a keypress and return its code. */ ++int ++getkey (void) ++{ ++ return current_term->getkey (); ++} ++ ++/* Check if a key code is available. */ ++int ++checkkey (void) ++{ ++ return current_term->checkkey (); ++} ++#endif /* ! STAGE1_5 */ ++ ++/* Display an ASCII character. */ ++void ++grub_putchar (int c) ++{ ++ if (c == '\n') ++ grub_putchar ('\r'); ++#ifndef STAGE1_5 ++ else if (c == '\t' && current_term->getxy) ++ { ++ int n; ++ ++ n = 8 - ((current_term->getxy () >> 8) & 3); ++ while (n--) ++ grub_putchar (' '); ++ ++ return; ++ } ++#endif /* ! STAGE1_5 */ ++ ++#ifdef STAGE1_5 ++ ++ /* In Stage 1.5, only the normal console is supported. */ ++ console_putchar (c); ++ ++#else /* ! STAGE1_5 */ ++ ++ if (c == '\n') ++ { ++ /* Internal `more'-like feature. */ ++ if (count_lines >= 0) ++ { ++ count_lines++; ++ if (count_lines >= max_lines - 2) ++ { ++ int tmp; ++ ++ /* It's important to disable the feature temporarily, because ++ the following grub_printf call will print newlines. */ ++ count_lines = -1; ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); ++ ++ grub_printf ("\n[Hit return to continue]"); ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_NORMAL); ++ ++ do ++ { ++ tmp = ASCII_CHAR (getkey ()); ++ } ++ while (tmp != '\n' && tmp != '\r'); ++ grub_printf ("\r \r"); ++ ++ /* Restart to count lines. */ ++ count_lines = 0; ++ return; ++ } ++ } ++ } ++ ++ current_term->putchar (c); ++ ++#endif /* ! STAGE1_5 */ ++} ++ ++#ifndef STAGE1_5 ++void ++gotoxy (int x, int y) ++{ ++ current_term->gotoxy (x, y); ++} ++ ++int ++getxy (void) ++{ ++ return current_term->getxy (); ++} ++ ++void ++cls (void) ++{ ++ /* If the terminal is dumb, there is no way to clean the terminal. */ ++ if (current_term->flags & TERM_DUMB) ++ grub_putchar ('\n'); ++ else ++ current_term->cls (); ++} ++ ++int ++setcursor (int on) ++{ ++ if (current_term->setcursor) ++ return current_term->setcursor (on); ++ ++ return 1; ++} ++#endif /* ! STAGE1_5 */ ++ ++int ++substring (const char *s1, const char *s2) ++{ ++ while (*s1 == *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 ++nul_terminate (char *str) ++{ ++ int ch; ++ ++ while (*str && ! grub_isspace (*str)) ++ str++; ++ ++ ch = *str; ++ *str = 0; ++ return ch; ++} ++ ++char * ++grub_strstr (const char *s1, const char *s2) ++{ ++ while (*s1) ++ { ++ const char *ptr, *tmp; ++ ++ ptr = s1; ++ tmp = s2; ++ ++ while (*tmp && *ptr == *tmp) ++ ptr++, tmp++; ++ ++ if (tmp > s2 && ! *tmp) ++ return (char *) s1; ++ ++ s1++; ++ } ++ ++ return 0; ++} ++ ++int ++grub_strlen (const char *str) ++{ ++ int len = 0; ++ ++ while (*str++) ++ len++; ++ ++ return len; ++} ++#endif /* ! STAGE1_5 */ ++ ++int ++memcheck (int addr, int len) ++{ ++#ifdef GRUB_UTIL ++ auto int start_addr (void); ++ auto int end_addr (void); ++ ++ auto int start_addr (void) ++ { ++ int ret; ++# if defined(HAVE_START_SYMBOL) ++ asm volatile ("movl $start, %0" : "=a" (ret)); ++# elif defined(HAVE_USCORE_START_SYMBOL) ++ asm volatile ("movl $_start, %0" : "=a" (ret)); ++# endif ++ return ret; ++ } ++ ++ auto int end_addr (void) ++ { ++ int ret; ++# if defined(HAVE_END_SYMBOL) ++ asm volatile ("movl $end, %0" : "=a" (ret)); ++# elif defined(HAVE_USCORE_END_SYMBOL) ++ asm volatile ("movl $_end, %0" : "=a" (ret)); ++# endif ++ return ret; ++ } ++ ++ if (start_addr () <= addr && end_addr () > addr + len) ++ return ! errnum; ++#endif /* GRUB_UTIL */ ++ ++ if ((addr < RAW_ADDR (0x1000)) ++ || (addr < RAW_ADDR (0x100000) ++ && RAW_ADDR (mbi.mem_lower * 1024) < (addr + len)) ++ || (addr >= RAW_ADDR (0x100000) ++ && RAW_ADDR (mbi.mem_upper * 1024) < ((addr - 0x100000) + len))) ++ errnum = ERR_WONT_FIT; ++ ++ return ! errnum; ++} ++ ++void * ++grub_memmove (void *to, const void *from, int len) ++{ ++ if (memcheck ((int) to, len)) ++ { ++ /* This assembly code is stolen from ++ linux-2.2.2/include/asm-i386/string.h. This is not very fast ++ but compact. */ ++ int d0, d1, d2; ++ ++ if (to < from) ++ { ++ asm volatile ("cld\n\t" ++ "rep\n\t" ++ "movsb" ++ : "=&c" (d0), "=&S" (d1), "=&D" (d2) ++ : "0" (len),"1" (from),"2" (to) ++ : "memory"); ++ } ++ else ++ { ++ asm volatile ("std\n\t" ++ "rep\n\t" ++ "movsb\n\t" ++ "cld" ++ : "=&c" (d0), "=&S" (d1), "=&D" (d2) ++ : "0" (len), ++ "1" (len - 1 + (const char *) from), ++ "2" (len - 1 + (char *) to) ++ : "memory"); ++ } ++ } ++ ++ return errnum ? NULL : to; ++} ++ ++void * ++grub_memset (void *start, int c, int len) ++{ ++ char *p = start; ++ ++ if (memcheck ((int) start, len)) ++ { ++ while (len -- > 0) ++ *p ++ = c; ++ } ++ ++ return errnum ? NULL : start; ++} ++ ++#ifndef STAGE1_5 ++char * ++grub_strcpy (char *dest, const char *src) ++{ ++ grub_memmove (dest, src, grub_strlen (src) + 1); ++ return dest; ++} ++#endif /* ! STAGE1_5 */ ++ ++#ifndef GRUB_UTIL ++# undef memcpy ++/* GCC emits references to memcpy() for struct copies etc. */ ++void *memcpy (void *dest, const void *src, int n) __attribute__ ((alias ("grub_memmove"))); ++#endif +diff -Nur grub-0.97/stage2/common.c grub-0.97-patched/stage2/common.c +--- grub-0.97/stage2/common.c 2004-03-27 17:25:44.000000000 +0100 ++++ grub-0.97-patched/stage2/common.c 2012-11-11 17:06:52.558085305 +0100 +@@ -142,7 +142,8 @@ + init_bios_info (void) + { + #ifndef STAGE1_5 +- unsigned long cont, memtmp, addr; ++ unsigned long memtmp, addr; ++ volatile unsigned long cont; + int drive; + #endif + +diff -Nur grub-0.97/stage2/disk_io.c grub-0.97-patched/stage2/disk_io.c +--- grub-0.97/stage2/disk_io.c 2004-05-23 18:35:24.000000000 +0200 ++++ grub-0.97-patched/stage2/disk_io.c 2012-11-11 17:07:12.740730013 +0100 +@@ -21,6 +21,7 @@ + + #include + #include ++#include + + #ifdef SUPPORT_NETBOOT + # define GRUB 1 +@@ -137,7 +138,7 @@ + } + + int +-rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) ++rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf) + { + int slen, sectors_per_vtrack; + int sector_size_bits = log2 (buf_geom.sector_size); +@@ -261,7 +262,7 @@ + */ + if (disk_read_func) + { +- int sector_num = sector; ++ unsigned int sector_num = sector; + int length = buf_geom.sector_size - byte_offset; + if (length > size) + length = size; +@@ -291,7 +292,7 @@ + + + int +-devread (int sector, int byte_offset, int byte_len, char *buf) ++devread (unsigned int sector, int byte_offset, int byte_len, char *buf) + { + /* + * Check partition boundaries +@@ -330,7 +331,7 @@ + + #ifndef STAGE1_5 + int +-rawwrite (int drive, int sector, char *buf) ++rawwrite (int drive, unsigned int sector, char *buf) + { + if (sector == 0) + { +@@ -363,7 +364,7 @@ + } + + int +-devwrite (int sector, int sector_count, char *buf) ++devwrite (unsigned int sector, int sector_count, char *buf) + { + #if defined(GRUB_UTIL) && defined(__linux__) + if (current_partition != 0xFFFFFF +@@ -502,8 +503,8 @@ + 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 +525,15 @@ + /* 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 +585,14 @@ + 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) +@@ -666,6 +677,40 @@ + 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) ++ { ++ struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf; ++ ++ /* Read in the GPT Partition table header. */ ++ if (! rawread (drive, 1, 0, SECTOR_SIZE, 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, SECTOR_SIZE, buf)) ++ return 0; ++ } ++ } ++ ++ /* Not a GPT partition. */ ++ *gpt_offset = 0; ++ + /* Increase the entry number. */ + (*entry)++; + +@@ -710,6 +755,43 @@ + 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 (*gpt_size, *entry), GPT_ENTRY_INDEX (*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 +799,9 @@ + 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)) +@@ -746,6 +831,8 @@ + #ifndef STAGE1_5 + static unsigned long cur_part_offset; + static unsigned long cur_part_addr; ++static unsigned long cur_part_start; ++static int cur_part_entry; + #endif + + /* Open a partition. */ +@@ -755,6 +842,9 @@ + 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]; + int bsd_part, pc_slice; +@@ -766,7 +856,8 @@ + 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; +@@ -800,7 +891,12 @@ + + /* If this is the whole disk, return here. */ + if (! flags && current_partition == 0xFFFFFF) +- return 1; ++ { ++#ifndef STAGE1_5 ++ cur_part_offset = 0; ++#endif /* ! STAGE1_5 */ ++ return 1; ++ } + + if (flags) + dest_partition = 0xFFFFFF; +@@ -815,6 +911,8 @@ + + cur_part_offset = part_offset; + cur_part_addr = BOOT_PART_TABLE + (entry << 4); ++ cur_part_start = part_start; ++ cur_part_entry = entry; + #endif /* ! STAGE1_5 */ + + /* If this is a valid partition... */ +@@ -1142,6 +1240,7 @@ + src = (char *) SCRATCHADDR + BOOTSEC_PART_OFFSET; + while (dst < (char *) BOOT_PART_TABLE + BOOTSEC_PART_LENGTH) + *dst++ = *src++; ++ PC_SLICE_START (BOOT_PART_TABLE - PC_SLICE_OFFSET, cur_part_entry) = cur_part_start; + + /* Set the active flag of the booted partition. */ + for (i = 0; i < 4; i++) +diff -Nur grub-0.97/stage2/fsys_ext2fs.c grub-0.97-patched/stage2/fsys_ext2fs.c +--- grub-0.97/stage2/fsys_ext2fs.c 2004-08-08 20:19:18.000000000 +0200 ++++ grub-0.97-patched/stage2/fsys_ext2fs.c 2012-11-11 17:07:12.750730331 +0100 +@@ -41,6 +41,7 @@ + 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 +@@ -61,9 +62,9 @@ + __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 +73,62 @@ + __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 */ ++ /* ++ * 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 */ ++ __u32 s_reserved[172]; /* Padding to the end of the block */ + }; + +-struct ext2_group_desc ++struct ext4_group_desc + { + __u32 bg_block_bitmap; /* Blocks bitmap block */ + __u32 bg_inode_bitmap; /* Inodes bitmap block */ +@@ -90,8 +136,18 @@ + __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 +185,22 @@ + __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 +209,36 @@ + 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 +256,57 @@ + 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 +@@ -218,13 +345,30 @@ + #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_GOOD_OLD_REV 0 /* The good old (original) format */ ++#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */ ++#define EXT2_GOOD_OLD_INODE_SIZE 128 ++#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \ ++ EXT2_GOOD_OLD_INODE_SIZE : \ ++ (s)->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 +@@ -386,6 +530,122 @@ + [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 +680,11 @@ + /* 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-dick 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 +769,7 @@ + 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 */ +@@ -550,10 +815,17 @@ + { + 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 */ +@@ -565,13 +837,12 @@ + /* 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 +900,10 @@ + } + 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 +914,9 @@ + } + 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 +950,13 @@ + 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 +1011,28 @@ + } + + /* 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-dick 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 -Nur grub-0.97/stage2/gpt.h grub-0.97-patched/stage2/gpt.h +--- grub-0.97/stage2/gpt.h 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/gpt.h 2012-11-11 17:07:12.697728638 +0100 +@@ -0,0 +1,68 @@ ++/* ++ * 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 0x5452415020494645UL ++ ++#define GPT_ENTRY_SECTOR(size,entry) \ ++ ((((entry) * (size) + 1) & ~(SECTOR_SIZE - 1)) >> SECTOR_BITS) ++#define GPT_ENTRY_INDEX(size,entry) \ ++ ((((entry) * (size) + 1) & (SECTOR_SIZE - 1)) - 1) ++ ++#endif /* _GPT_H */ +diff -Nur grub-0.97/stage2/graphics.c grub-0.97-patched/stage2/graphics.c +--- grub-0.97/stage2/graphics.c 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/graphics.c 2012-11-11 17:06:33.320470847 +0100 +@@ -0,0 +1,563 @@ ++/* 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(!grub_file_exists(splashimage)) { ++ return 0; ++ } ++ ++ 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); ++} ++ ++int grub_file_exists(char *s) { ++ if (!grub_open(s)) ++ return 0; ++ grub_close(); ++ return 1; ++} ++ ++#endif /* SUPPORT_GRAPHICS */ +diff -Nur grub-0.97/stage2/graphics.h grub-0.97-patched/stage2/graphics.h +--- grub-0.97/stage2/graphics.h 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/graphics.h 2012-11-11 17:06:33.321470879 +0100 +@@ -0,0 +1,45 @@ ++/* 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(); ++ ++/* Only to check for safe opening before we start */ ++int grub_file_exists(char *s); ++ ++extern short cursorX, cursorY; ++extern char cursorBuf[16]; ++ ++#endif /* GRAPHICS_H */ +diff -Nur grub-0.97/stage2/iso9660.h grub-0.97-patched/stage2/iso9660.h +--- grub-0.97/stage2/iso9660.h 2004-03-27 17:02:38.000000000 +0100 ++++ grub-0.97-patched/stage2/iso9660.h 2012-11-11 17:07:12.740730013 +0100 +@@ -73,11 +73,11 @@ + + 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 -Nur grub-0.97/stage2/Makefile.am grub-0.97-patched/stage2/Makefile.am +--- grub-0.97/stage2/Makefile.am 2005-02-02 21:37:35.000000000 +0100 ++++ grub-0.97-patched/stage2/Makefile.am 2012-11-11 17:07:12.747730236 +0100 +@@ -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,20 +19,20 @@ + 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 \ ++ terminfo.c tparm.c graphics.c ++libgrub_a_CFLAGS = $(GRUB_CFLAGS) -fno-stack-protector -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 + + # Stage 2 and Stage 1.5's. +-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++stagedir = $(libdir)/$(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 \ ++stage_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 \ ++stage_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 +@@ -79,8 +79,14 @@ + HERCULES_FLAGS = + endif + +-STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) ++if GRAPHICS_SUPPORT ++GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1 ++else ++GRAPHICS_FLAGS = ++endif ++ ++STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-reorder-functions -fno-builtin -nostdinc \ ++ $(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 +@@ -90,7 +96,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) +@@ -105,7 +112,7 @@ + BUILT_SOURCES = stage2_size.h + endif + +-CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) ++CLEANFILES = $(stage_DATA) $(noinst_DATA) $(BUILT_SOURCES) + + stage2_size.h: pre_stage2 + -rm -f stage2_size.h +diff -Nur grub-0.97/stage2/Makefile.am.orig grub-0.97-patched/stage2/Makefile.am.orig +--- grub-0.97/stage2/Makefile.am.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/Makefile.am.orig 2005-02-02 21:37:35.000000000 +0100 +@@ -0,0 +1,272 @@ ++# 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 ++ ++# Stage 2 and Stage 1.5's. ++pkglibdir = $(libdir)/$(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 \ ++ 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 ++noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless ++noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ ++ e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \ ++ iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.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 \ ++ 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 ++noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ ++ e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \ ++ iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \ ++ reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ ++ xfs_stage1_5.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 ++ ++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 ++ ++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) ++ ++if NETBOOT_SUPPORT ++pre_stage2_exec_LDADD = ../netboot/libdrivers.a ++endif ++ ++if DISKLESS_SUPPORT ++BUILT_SOURCES = stage2_size.h diskless_size.h ++else ++BUILT_SOURCES = stage2_size.h ++endif ++ ++CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) ++ ++stage2_size.h: pre_stage2 ++ -rm -f stage2_size.h ++ set dummy `ls -l pre_stage2`; \ ++ echo "#define STAGE2_SIZE $$6" > stage2_size.h ++ ++start_exec_SOURCES = start.S ++start_exec_CCASFLAGS = $(STAGE2_COMPILE) ++start_exec_LDFLAGS = $(START_LINK) ++ ++# 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_SOURCES = start_eltorito.S ++start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) ++start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) ++ ++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 ++ ++# 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 ++ ++diskless_size.h: diskless ++ -rm -f $@ ++ set dummy `ls -l $^`; \ ++ echo "#define DISKLESS_SIZE $$6" > $@ ++ ++# For nbloader target. ++nbloader_exec_SOURCES = nbloader.S ++nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE) ++nbloader_exec_LDFLAGS = $(NBLOADER_LINK) ++ ++# 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 $^ > $@ ++ ++# For pxeloader target. ++pxeloader_exec_SOURCES = pxeloader.S ++pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE) ++pxeloader_exec_LDFLAGS = $(PXELOADER_LINK) ++ ++# 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 $^ > $@ ++ ++# General rule for making a raw binary. ++SUFFIXES = .exec ++.exec: ++ $(OBJCOPY) -O binary $< $@ +diff -Nur grub-0.97/stage2/pc_slice.h grub-0.97-patched/stage2/pc_slice.h +--- grub-0.97/stage2/pc_slice.h 2003-07-09 13:45:53.000000000 +0200 ++++ grub-0.97-patched/stage2/pc_slice.h 2012-11-11 17:07:12.698728671 +0100 +@@ -115,6 +115,7 @@ + #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_LINUX_RAID 0xfd + + +diff -Nur grub-0.97/stage2/shared.h grub-0.97-patched/stage2/shared.h +--- grub-0.97/stage2/shared.h 2004-06-19 18:40:09.000000000 +0200 ++++ grub-0.97-patched/stage2/shared.h 2012-11-11 17:07:12.741730044 +0100 +@@ -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) +@@ -161,7 +161,9 @@ + + #define LINUX_CL_OFFSET 0x9000 + #define LINUX_CL_END_OFFSET 0x90FF +-#define LINUX_SETUP_MOVE_SIZE 0x9100 ++#define LINUX_CL_0202_PRM_OFFSET 0x9500 ++#define LINUX_CL_0202_PRM_END_OFFSET 0x9FFF ++#define LINUX_SETUP_MOVE_SIZE 0xA000 + #define LINUX_CL_MAGIC 0xA33F + + /* +@@ -499,7 +501,11 @@ + unsigned char linear_reserved_field_position; + unsigned long max_pixel_clock; + +- unsigned char reserved3[189]; ++ /* Reserved field to make structure to be 256 bytes long, VESA BIOS ++ Extension 3.0 Specification says to reserve 189 bytes here but ++ that doesn't make structure to be 256 bytes. So additional one is ++ added here. */ ++ unsigned char reserved3[189 + 1]; + } __attribute__ ((packed)); + + +@@ -807,7 +813,7 @@ + /* 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); ++ unsigned int sector, int nsec, int segment); + void stop_floppy (void); + + /* Command-line interface functions. */ +@@ -871,6 +877,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); +@@ -911,7 +918,7 @@ + int nul_terminate (char *str); + int get_based_digit (int c, int base); + int safe_parse_maxint (char **str_ptr, int *myint_ptr); +-int memcheck (int start, int len); ++int memcheck (unsigned long start, unsigned long len); + void grub_putstr (const char *str); + + #ifndef NO_DECOMPRESSION +@@ -920,10 +927,10 @@ + int gunzip_read (char *buf, int len); + #endif /* NO_DECOMPRESSION */ + +-int rawread (int drive, int sector, int byte_offset, int byte_len, char *buf); +-int devread (int sector, int byte_offset, int byte_len, char *buf); +-int rawwrite (int drive, int sector, char *buf); +-int devwrite (int sector, int sector_len, char *buf); ++int rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf); ++int devread (unsigned int sector, int byte_offset, int byte_len, char *buf); ++int rawwrite (int drive, unsigned int sector, char *buf); ++int devwrite (unsigned int sector, int sector_len, char *buf); + + /* Parse a device string and initialize the global parameters. */ + char *set_device (char *device); +@@ -934,7 +941,9 @@ + 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); +diff -Nur grub-0.97/stage2/size_test grub-0.97-patched/stage2/size_test +--- grub-0.97/stage2/size_test 2004-05-14 21:30:52.000000000 +0200 ++++ grub-0.97-patched/stage2/size_test 2012-11-11 17:06:52.554085177 +0100 +@@ -36,9 +36,9 @@ + } + + # The bootloader area of a FFS partition is 14 sectors. +-check ffs_stage1_5 7168 +- +-check ufs2_stage1_5 7168 ++#check ffs_stage1_5 7168 ++# ++#check ufs2_stage1_5 7168 + + # Stage 1.5 can be installed in the sectors immediately after MBR in the + # first cylinder, so the size is (63 - 1) sectors. +diff -Nur grub-0.97/stage2/stage2.c grub-0.97-patched/stage2/stage2.c +--- grub-0.97/stage2/stage2.c 2005-03-19 18:51:57.000000000 +0100 ++++ grub-0.97-patched/stage2/stage2.c 2012-11-11 17:07:12.742730076 +0100 +@@ -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. +@@ -651,7 +652,10 @@ + *(new_heap++) = 0; + + if (config_entries) +- run_menu (heap, NULL, new_num_entries, new_heap, 0); ++ { ++ current_entryno = first_entry + entryno; ++ run_menu (heap, NULL, new_num_entries, new_heap, 0); ++ } + else + { + cls (); +@@ -714,6 +718,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) + { +@@ -727,7 +740,8 @@ + cur_entry = get_entry (config_entries, first_entry + entryno, 1); + + /* Set CURRENT_ENTRYNO for the command "savedefault". */ +- current_entryno = first_entry + entryno; ++ if (config_entries) ++ current_entryno = first_entry + entryno; + + if (run_script (cur_entry, heap)) + { +@@ -748,6 +762,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; + } +@@ -1050,6 +1071,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 +diff -Nur grub-0.97/stage2/stage2.c.orig grub-0.97-patched/stage2/stage2.c.orig +--- grub-0.97/stage2/stage2.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/stage2.c.orig 2005-03-19 18:51:57.000000000 +0100 +@@ -0,0 +1,1067 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2000,2001,2002,2004,2005 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 ++ ++grub_jmp_buf restart_env; ++ ++#if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS) ++ ++# if defined(PRESET_MENU_STRING) ++static const char *preset_menu = PRESET_MENU_STRING; ++# elif defined(SUPPORT_DISKLESS) ++/* Execute the command "bootp" automatically. */ ++static const char *preset_menu = "bootp\n"; ++# endif /* SUPPORT_DISKLESS */ ++ ++static int preset_menu_offset; ++ ++static int ++open_preset_menu (void) ++{ ++#ifdef GRUB_UTIL ++ /* Unless the user explicitly requests to use the preset menu, ++ always opening the preset menu fails in the grub shell. */ ++ if (! use_preset_menu) ++ return 0; ++#endif /* GRUB_UTIL */ ++ ++ preset_menu_offset = 0; ++ return preset_menu != 0; ++} ++ ++static int ++read_from_preset_menu (char *buf, int maxlen) ++{ ++ int len = grub_strlen (preset_menu + preset_menu_offset); ++ ++ if (len > maxlen) ++ len = maxlen; ++ ++ grub_memmove (buf, preset_menu + preset_menu_offset, len); ++ preset_menu_offset += len; ++ ++ return len; ++} ++ ++static void ++close_preset_menu (void) ++{ ++ /* Disable the preset menu. */ ++ preset_menu = 0; ++} ++ ++#else /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */ ++ ++#define open_preset_menu() 0 ++#define read_from_preset_menu(buf, maxlen) 0 ++#define close_preset_menu() ++ ++#endif /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */ ++ ++static char * ++get_entry (char *list, int num, int nested) ++{ ++ int i; ++ ++ for (i = 0; i < num; i++) ++ { ++ do ++ { ++ while (*(list++)); ++ } ++ while (nested && *(list++)); ++ } ++ ++ return list; ++} ++ ++/* Print an entry in a line of the menu box. */ ++static void ++print_entry (int y, int highlight, char *entry) ++{ ++ int x; ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_NORMAL); ++ ++ if (highlight && current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); ++ ++ gotoxy (2, y); ++ grub_putchar (' '); ++ for (x = 3; x < 75; x++) ++ { ++ if (*entry && x <= 72) ++ { ++ if (x == 72) ++ grub_putchar (DISP_RIGHT); ++ else ++ grub_putchar (*entry++); ++ } ++ else ++ grub_putchar (' '); ++ } ++ gotoxy (74, y); ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_STANDARD); ++} ++ ++/* Print entries in the menu box. */ ++static void ++print_entries (int y, int size, int first, int entryno, char *menu_entries) ++{ ++ int i; ++ ++ gotoxy (77, y + 1); ++ ++ if (first) ++ grub_putchar (DISP_UP); ++ else ++ grub_putchar (' '); ++ ++ menu_entries = get_entry (menu_entries, first, 0); ++ ++ for (i = 0; i < size; i++) ++ { ++ print_entry (y + i + 1, entryno == i, menu_entries); ++ ++ while (*menu_entries) ++ menu_entries++; ++ ++ if (*(menu_entries - 1)) ++ menu_entries++; ++ } ++ ++ gotoxy (77, y + size); ++ ++ if (*menu_entries) ++ grub_putchar (DISP_DOWN); ++ else ++ grub_putchar (' '); ++ ++ gotoxy (74, y + entryno + 1); ++} ++ ++static void ++print_entries_raw (int size, int first, char *menu_entries) ++{ ++ int i; ++ ++#define LINE_LENGTH 67 ++ ++ for (i = 0; i < LINE_LENGTH; i++) ++ grub_putchar ('-'); ++ grub_putchar ('\n'); ++ ++ for (i = first; i < size; i++) ++ { ++ /* grub's printf can't %02d so ... */ ++ if (i < 10) ++ grub_putchar (' '); ++ grub_printf ("%d: %s\n", i, get_entry (menu_entries, i, 0)); ++ } ++ ++ for (i = 0; i < LINE_LENGTH; i++) ++ grub_putchar ('-'); ++ grub_putchar ('\n'); ++ ++#undef LINE_LENGTH ++} ++ ++ ++static void ++print_border (int y, int size) ++{ ++ int i; ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_NORMAL); ++ ++ gotoxy (1, y); ++ ++ grub_putchar (DISP_UL); ++ for (i = 0; i < 73; i++) ++ grub_putchar (DISP_HORIZ); ++ grub_putchar (DISP_UR); ++ ++ i = 1; ++ while (1) ++ { ++ gotoxy (1, y + i); ++ ++ if (i > size) ++ break; ++ ++ grub_putchar (DISP_VERT); ++ gotoxy (75, y + i); ++ grub_putchar (DISP_VERT); ++ ++ i++; ++ } ++ ++ grub_putchar (DISP_LL); ++ for (i = 0; i < 73; i++) ++ grub_putchar (DISP_HORIZ); ++ grub_putchar (DISP_LR); ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_STANDARD); ++} ++ ++static void ++run_menu (char *menu_entries, char *config_entries, int num_entries, ++ char *heap, int entryno) ++{ ++ int c, time1, time2 = -1, first_entry = 0; ++ char *cur_entry = 0; ++ ++ /* ++ * Main loop for menu UI. ++ */ ++ ++restart: ++ /* Dumb terminal always use all entries for display ++ invariant for TERM_DUMB: first_entry == 0 */ ++ if (! (current_term->flags & TERM_DUMB)) ++ { ++ while (entryno > 11) ++ { ++ first_entry++; ++ entryno--; ++ } ++ } ++ ++ /* If the timeout was expired or wasn't set, force to show the menu ++ 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) ++ { ++ /* Get current time. */ ++ while ((time1 = getrtsecs ()) == 0xFF) ++ ; ++ ++ while (1) ++ { ++ /* Check if ESC is pressed. */ ++ if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e') ++ { ++ grub_timeout = -1; ++ show_menu = 1; ++ break; ++ } ++ ++ /* If GRUB_TIMEOUT is expired, boot the default entry. */ ++ if (grub_timeout >=0 ++ && (time1 = getrtsecs ()) != time2 ++ && time1 != 0xFF) ++ { ++ if (grub_timeout <= 0) ++ { ++ grub_timeout = -1; ++ goto boot_entry; ++ } ++ ++ time2 = time1; ++ grub_timeout--; ++ ++ /* Print a message. */ ++ grub_printf ("\rPress `ESC' to enter the menu... %d ", ++ grub_timeout); ++ } ++ } ++ } ++ ++ /* Only display the menu if the user wants to see it. */ ++ if (show_menu) ++ { ++ init_page (); ++ setcursor (0); ++ ++ if (current_term->flags & TERM_DUMB) ++ print_entries_raw (num_entries, first_entry, menu_entries); ++ else ++ print_border (3, 12); ++ ++ grub_printf ("\n\ ++ Use the %c and %c keys to select which entry is highlighted.\n", ++ DISP_UP, DISP_DOWN); ++ ++ if (! auth && password) ++ { ++ printf ("\ ++ Press enter to boot the selected OS or \'p\' to enter a\n\ ++ password to unlock the next set of features."); ++ } ++ else ++ { ++ 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."); ++ else ++ printf ("\ ++ Press \'b\' to boot, \'e\' to edit the selected command in the\n\ ++ boot sequence, \'c\' for a command-line, \'o\' to open a new line\n\ ++ after (\'O\' for before) the selected line, \'d\' to remove the\n\ ++ selected line, or escape to go back to the main menu."); ++ } ++ ++ if (current_term->flags & TERM_DUMB) ++ grub_printf ("\n\nThe selected entry is %d ", entryno); ++ else ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ ++ /* XX using RT clock now, need to initialize value */ ++ while ((time1 = getrtsecs()) == 0xFF); ++ ++ while (1) ++ { ++ /* Initialize to NULL just in case... */ ++ cur_entry = NULL; ++ ++ if (grub_timeout >= 0 && (time1 = getrtsecs()) != time2 && time1 != 0xFF) ++ { ++ if (grub_timeout <= 0) ++ { ++ grub_timeout = -1; ++ break; ++ } ++ ++ /* else not booting yet! */ ++ time2 = time1; ++ ++ if (current_term->flags & TERM_DUMB) ++ grub_printf ("\r Entry %d will be booted automatically in %d seconds. ", ++ entryno, grub_timeout); ++ else ++ { ++ gotoxy (3, 22); ++ grub_printf ("The highlighted entry will be booted automatically in %d seconds. ", ++ grub_timeout); ++ gotoxy (74, 4 + entryno); ++ } ++ ++ grub_timeout--; ++ } ++ ++ /* Check for a keypress, however if TIMEOUT has been expired ++ (GRUB_TIMEOUT == -1) relax in GETKEY even if no key has been ++ pressed. ++ This avoids polling (relevant in the grub-shell and later on ++ in grub if interrupt driven I/O is done). */ ++ if (checkkey () >= 0 || grub_timeout < 0) ++ { ++ /* Key was pressed, show which entry is selected before GETKEY, ++ since we're comming in here also on GRUB_TIMEOUT == -1 and ++ hang in GETKEY */ ++ if (current_term->flags & TERM_DUMB) ++ grub_printf ("\r Highlighted entry is %d: ", entryno); ++ ++ c = ASCII_CHAR (getkey ()); ++ ++ if (grub_timeout >= 0) ++ { ++ if (current_term->flags & TERM_DUMB) ++ grub_putchar ('\r'); ++ else ++ gotoxy (3, 22); ++ printf (" "); ++ grub_timeout = -1; ++ fallback_entryno = -1; ++ if (! (current_term->flags & TERM_DUMB)) ++ gotoxy (74, 4 + entryno); ++ } ++ ++ /* We told them above (at least in SUPPORT_SERIAL) to use ++ '^' or 'v' so accept these keys. */ ++ if (c == 16 || c == '^') ++ { ++ if (current_term->flags & TERM_DUMB) ++ { ++ if (entryno > 0) ++ entryno--; ++ } ++ else ++ { ++ if (entryno > 0) ++ { ++ print_entry (4 + entryno, 0, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ entryno--; ++ print_entry (4 + entryno, 1, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ } ++ else if (first_entry > 0) ++ { ++ first_entry--; ++ print_entries (3, 12, first_entry, entryno, ++ menu_entries); ++ } ++ } ++ } ++ else if ((c == 14 || c == 'v') ++ && first_entry + entryno + 1 < num_entries) ++ { ++ if (current_term->flags & TERM_DUMB) ++ entryno++; ++ else ++ { ++ if (entryno < 11) ++ { ++ print_entry (4 + entryno, 0, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ entryno++; ++ print_entry (4 + entryno, 1, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ } ++ else if (num_entries > 12 + first_entry) ++ { ++ first_entry++; ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ } ++ } ++ else if (c == 7) ++ { ++ /* Page Up */ ++ first_entry -= 12; ++ if (first_entry < 0) ++ { ++ entryno += first_entry; ++ first_entry = 0; ++ if (entryno < 0) ++ entryno = 0; ++ } ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ else if (c == 3) ++ { ++ /* Page Down */ ++ first_entry += 12; ++ if (first_entry + entryno + 1 >= num_entries) ++ { ++ first_entry = num_entries - 12; ++ if (first_entry < 0) ++ first_entry = 0; ++ entryno = num_entries - first_entry - 1; ++ } ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ ++ if (config_entries) ++ { ++ if ((c == '\n') || (c == '\r') || (c == 6)) ++ break; ++ } ++ else ++ { ++ if ((c == 'd') || (c == 'o') || (c == 'O')) ++ { ++ if (! (current_term->flags & TERM_DUMB)) ++ print_entry (4 + entryno, 0, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ ++ /* insert after is almost exactly like insert before */ ++ if (c == 'o') ++ { ++ /* But `o' differs from `O', since it may causes ++ the menu screen to scroll up. */ ++ if (entryno < 11 || (current_term->flags & TERM_DUMB)) ++ entryno++; ++ else ++ first_entry++; ++ ++ c = 'O'; ++ } ++ ++ cur_entry = get_entry (menu_entries, ++ first_entry + entryno, ++ 0); ++ ++ if (c == 'O') ++ { ++ grub_memmove (cur_entry + 2, cur_entry, ++ ((int) heap) - ((int) cur_entry)); ++ ++ cur_entry[0] = ' '; ++ cur_entry[1] = 0; ++ ++ heap += 2; ++ ++ num_entries++; ++ } ++ else if (num_entries > 0) ++ { ++ char *ptr = get_entry(menu_entries, ++ first_entry + entryno + 1, ++ 0); ++ ++ grub_memmove (cur_entry, ptr, ++ ((int) heap) - ((int) ptr)); ++ heap -= (((int) ptr) - ((int) cur_entry)); ++ ++ num_entries--; ++ ++ if (entryno >= num_entries) ++ entryno--; ++ if (first_entry && num_entries < 12 + first_entry) ++ first_entry--; ++ } ++ ++ if (current_term->flags & TERM_DUMB) ++ { ++ grub_printf ("\n\n"); ++ print_entries_raw (num_entries, first_entry, ++ menu_entries); ++ grub_printf ("\n"); ++ } ++ else ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ ++ cur_entry = menu_entries; ++ if (c == 27) ++ return; ++ if (c == 'b') ++ break; ++ } ++ ++ if (! auth && password) ++ { ++ if (c == 'p') ++ { ++ /* Do password check here! */ ++ char entered[32]; ++ char *pptr = password; ++ ++ if (current_term->flags & TERM_DUMB) ++ grub_printf ("\r "); ++ else ++ gotoxy (1, 21); ++ ++ /* Wipe out the previously entered password */ ++ grub_memset (entered, 0, sizeof (entered)); ++ get_cmdline (" Password: ", entered, 31, '*', 0); ++ ++ while (! isspace (*pptr) && *pptr) ++ pptr++; ++ ++ /* Make sure that PASSWORD is NUL-terminated. */ ++ *pptr++ = 0; ++ ++ if (! check_password (entered, password, password_type)) ++ { ++ char *new_file = config_file; ++ while (isspace (*pptr)) ++ pptr++; ++ ++ /* If *PPTR is NUL, then allow the user to use ++ privileged instructions, otherwise, load ++ another configuration file. */ ++ if (*pptr != 0) ++ { ++ while ((*(new_file++) = *(pptr++)) != 0) ++ ; ++ ++ /* Make sure that the user will not have ++ authority in the next configuration. */ ++ auth = 0; ++ return; ++ } ++ else ++ { ++ /* Now the user is superhuman. */ ++ auth = 1; ++ goto restart; ++ } ++ } ++ else ++ { ++ grub_printf ("Failed!\n Press any key to continue..."); ++ getkey (); ++ goto restart; ++ } ++ } ++ } ++ else ++ { ++ if (c == 'e') ++ { ++ int new_num_entries = 0, i = 0; ++ char *new_heap; ++ ++ if (config_entries) ++ { ++ new_heap = heap; ++ cur_entry = get_entry (config_entries, ++ first_entry + entryno, ++ 1); ++ } ++ else ++ { ++ /* safe area! */ ++ new_heap = heap + NEW_HEAPSIZE + 1; ++ cur_entry = get_entry (menu_entries, ++ first_entry + entryno, ++ 0); ++ } ++ ++ 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; ++ ++ if (config_entries) ++ run_menu (heap, NULL, new_num_entries, new_heap, 0); ++ else ++ { ++ cls (); ++ print_cmdline_message (0); ++ ++ new_heap = heap + NEW_HEAPSIZE + 1; ++ ++ saved_drive = boot_drive; ++ saved_partition = install_partition; ++ current_drive = GRUB_INVALID_DRIVE; ++ ++ if (! get_cmdline (PACKAGE " edit> ", new_heap, ++ NEW_HEAPSIZE + 1, 0, 1)) ++ { ++ int j = 0; ++ ++ /* get length of new command */ ++ while (new_heap[j++]) ++ ; ++ ++ if (j < 2) ++ { ++ j = 2; ++ new_heap[0] = ' '; ++ new_heap[1] = 0; ++ } ++ ++ /* align rest of commands properly */ ++ grub_memmove (cur_entry + j, cur_entry + i, ++ (int) heap - ((int) cur_entry + i)); ++ ++ /* copy command to correct area */ ++ grub_memmove (cur_entry, new_heap, j); ++ ++ heap += (j - i); ++ } ++ } ++ ++ goto restart; ++ } ++ if (c == 'c') ++ { ++ enter_cmdline (heap, 0); ++ goto restart; ++ } ++#ifdef GRUB_UTIL ++ if (c == 'q') ++ { ++ /* The same as ``quit''. */ ++ stop (); ++ } ++#endif ++ } ++ } ++ } ++ ++ /* Attempt to boot an entry. */ ++ ++ boot_entry: ++ ++ cls (); ++ setcursor (1); ++ ++ while (1) ++ { ++ if (config_entries) ++ printf (" Booting \'%s\'\n\n", ++ get_entry (menu_entries, first_entry + entryno, 0)); ++ else ++ printf (" Booting command-list\n\n"); ++ ++ if (! cur_entry) ++ cur_entry = get_entry (config_entries, first_entry + entryno, 1); ++ ++ /* Set CURRENT_ENTRYNO for the command "savedefault". */ ++ current_entryno = first_entry + entryno; ++ ++ if (run_script (cur_entry, heap)) ++ { ++ if (fallback_entryno >= 0) ++ { ++ cur_entry = NULL; ++ first_entry = 0; ++ entryno = fallback_entries[fallback_entryno]; ++ fallback_entryno++; ++ if (fallback_entryno >= MAX_FALLBACK_ENTRIES ++ || fallback_entries[fallback_entryno] < 0) ++ fallback_entryno = -1; ++ } ++ else ++ break; ++ } ++ else ++ break; ++ } ++ ++ show_menu = 1; ++ goto restart; ++} ++ ++ ++static int ++get_line_from_config (char *cmdline, int maxlen, int read_from_file) ++{ ++ int pos = 0, literal = 0, comment = 0; ++ char c; /* since we're loading it a byte at a time! */ ++ ++ while (1) ++ { ++ if (read_from_file) ++ { ++ if (! grub_read (&c, 1)) ++ break; ++ } ++ else ++ { ++ if (! read_from_preset_menu (&c, 1)) ++ break; ++ } ++ ++ /* Skip all carriage returns. */ ++ if (c == '\r') ++ continue; ++ ++ /* Replace tabs with spaces. */ ++ if (c == '\t') ++ c = ' '; ++ ++ /* The previous is a backslash, then... */ ++ if (literal) ++ { ++ /* If it is a newline, replace it with a space and continue. */ ++ if (c == '\n') ++ { ++ c = ' '; ++ ++ /* Go back to overwrite a backslash. */ ++ if (pos > 0) ++ pos--; ++ } ++ ++ literal = 0; ++ } ++ ++ /* translate characters first! */ ++ if (c == '\\' && ! literal) ++ literal = 1; ++ ++ if (comment) ++ { ++ if (c == '\n') ++ comment = 0; ++ } ++ else if (! pos) ++ { ++ if (c == '#') ++ comment = 1; ++ else if ((c != ' ') && (c != '\n')) ++ cmdline[pos++] = c; ++ } ++ else ++ { ++ if (c == '\n') ++ break; ++ ++ if (pos < maxlen) ++ cmdline[pos++] = c; ++ } ++ } ++ ++ cmdline[pos] = 0; ++ ++ return pos; ++} ++ ++ ++/* This is the starting function in C. */ ++void ++cmain (void) ++{ ++ int config_len, menu_len, num_entries; ++ char *config_entries, *menu_entries; ++ char *kill_buf = (char *) KILL_BUF; ++ ++ auto void reset (void); ++ void reset (void) ++ { ++ count_lines = -1; ++ config_len = 0; ++ menu_len = 0; ++ num_entries = 0; ++ config_entries = (char *) mbi.drives_addr + mbi.drives_length; ++ menu_entries = (char *) MENU_BUF; ++ init_config (); ++ } ++ ++ /* Initialize the environment for restarting Stage 2. */ ++ grub_setjmp (restart_env); ++ ++ /* Initialize the kill buffer. */ ++ *kill_buf = 0; ++ ++ /* Never return. */ ++ for (;;) ++ { ++ int is_opened, is_preset; ++ ++ reset (); ++ ++ /* Here load the configuration file. */ ++ ++#ifdef GRUB_UTIL ++ 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. ++ STATE 1: In a title command. ++ STATE >1: In a entry after a title command. */ ++ int state = 0, prev_config_len = 0, prev_menu_len = 0; ++ char *cmdline; ++ ++ /* Try the preset menu first. This will succeed at most once, ++ because close_preset_menu disables the preset menu. */ ++ is_opened = is_preset = open_preset_menu (); ++ if (! is_opened) ++ { ++ is_opened = grub_open (config_file); ++ errnum = ERR_NONE; ++ } ++ ++ if (! is_opened) ++ break; ++ ++ /* This is necessary, because the menu must be overrided. */ ++ reset (); ++ ++ cmdline = (char *) CMDLINE_BUF; ++ while (get_line_from_config (cmdline, NEW_HEAPSIZE, ++ ! is_preset)) ++ { ++ struct builtin *builtin; ++ ++ /* Get the pointer to the builtin structure. */ ++ builtin = find_command (cmdline); ++ errnum = 0; ++ if (! builtin) ++ /* Unknown command. Just skip now. */ ++ continue; ++ ++ if (builtin->flags & BUILTIN_TITLE) ++ { ++ char *ptr; ++ ++ /* the command "title" is specially treated. */ ++ if (state > 1) ++ { ++ /* The next title is found. */ ++ num_entries++; ++ config_entries[config_len++] = 0; ++ prev_menu_len = menu_len; ++ prev_config_len = config_len; ++ } ++ else ++ { ++ /* The first title is found. */ ++ menu_len = prev_menu_len; ++ config_len = prev_config_len; ++ } ++ ++ /* Reset the state. */ ++ state = 1; ++ ++ /* Copy title into menu area. */ ++ ptr = skip_to (1, cmdline); ++ while ((menu_entries[menu_len++] = *(ptr++)) != 0) ++ ; ++ } ++ else if (! state) ++ { ++ /* Run a command found is possible. */ ++ if (builtin->flags & BUILTIN_MENU) ++ { ++ char *arg = skip_to (1, cmdline); ++ (builtin->func) (arg, BUILTIN_MENU); ++ errnum = 0; ++ } ++ else ++ /* Ignored. */ ++ continue; ++ } ++ else ++ { ++ char *ptr = cmdline; ++ ++ state++; ++ /* Copy config file data to config area. */ ++ while ((config_entries[config_len++] = *ptr++) != 0) ++ ; ++ } ++ } ++ ++ if (state > 1) ++ { ++ /* Finish the last entry. */ ++ num_entries++; ++ config_entries[config_len++] = 0; ++ } ++ else ++ { ++ menu_len = prev_menu_len; ++ config_len = prev_config_len; ++ } ++ ++ menu_entries[menu_len++] = 0; ++ config_entries[config_len++] = 0; ++ grub_memmove (config_entries + config_len, menu_entries, ++ menu_len); ++ menu_entries = config_entries + config_len; ++ ++ /* Make sure that all fallback entries are valid. */ ++ if (fallback_entryno >= 0) ++ { ++ for (i = 0; i < MAX_FALLBACK_ENTRIES; i++) ++ { ++ if (fallback_entries[i] < 0) ++ break; ++ if (fallback_entries[i] >= num_entries) ++ { ++ grub_memmove (fallback_entries + i, ++ fallback_entries + i + 1, ++ ((MAX_FALLBACK_ENTRIES - i - 1) ++ * sizeof (int))); ++ i--; ++ } ++ } ++ ++ if (fallback_entries[0] < 0) ++ fallback_entryno = -1; ++ } ++ /* Check if the default entry is present. Otherwise reset ++ it to fallback if fallback is valid, or to DEFAULT_ENTRY ++ if not. */ ++ if (default_entry >= num_entries) ++ { ++ if (fallback_entryno >= 0) ++ { ++ default_entry = fallback_entries[0]; ++ fallback_entryno++; ++ if (fallback_entryno >= MAX_FALLBACK_ENTRIES ++ || fallback_entries[fallback_entryno] < 0) ++ fallback_entryno = -1; ++ } ++ else ++ default_entry = 0; ++ } ++ ++ if (is_preset) ++ close_preset_menu (); ++ else ++ grub_close (); ++ } ++ while (is_preset); ++ } ++ ++ 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. */ ++ enter_cmdline (config_entries, 1); ++ } ++ else ++ { ++ /* Run menu interface. */ ++ run_menu (menu_entries, config_entries, num_entries, ++ menu_entries + menu_len, default_entry); ++ } ++ } ++} +diff -Nur grub-0.97/stage2/term.h grub-0.97-patched/stage2/term.h +--- grub-0.97/stage2/term.h 2003-07-09 13:45:53.000000000 +0200 ++++ grub-0.97-patched/stage2/term.h 2012-11-11 17:06:33.311470556 +0100 +@@ -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 */ +diff -Nur grub-0.97/THANKS grub-0.97-patched/THANKS +--- grub-0.97/THANKS 2005-05-08 04:17:43.000000000 +0200 ++++ grub-0.97-patched/THANKS 2012-11-11 17:07:12.709729021 +0100 +@@ -121,3 +121,4 @@ + Yedidyah Bar-David + Yury V. Umanets + Yuri Zaporogets ++Vitaly Fertman +diff -Nur grub-0.97/util/grub-install.in grub-0.97-patched/util/grub-install.in +--- grub-0.97/util/grub-install.in 2004-07-24 20:57:31.000000000 +0200 ++++ grub-0.97-patched/util/grub-install.in 2012-11-11 17:07:12.748730268 +0100 +@@ -96,24 +96,27 @@ + # 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" | 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%\(e[0-9]\.[0-9]*\).*$%\1%'` ++ tmp_part=`echo "$1" | 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%.*e[0-9]\.[0-9]*p%%' \ ++ -e 's%.*e[0-9]\.[0-9]*\$%%'` + ;; + gnu*) + tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` + tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; + freebsd* | kfreebsd*-gnu) +- tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' \ +- | sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%'` ++ tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \ ++ | sed 's%r\{0,1\}\(da[0-9]*\).*$%\1%'` + tmp_part=`echo "$1" \ + | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \ + | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"` +@@ -131,7 +134,7 @@ + + # Get the drive name. + tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \ +- | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'` ++ | sed 's%.*\(([hf]d[0-9][a-z0-9,]*)\).*%\1%'` + + # If not found, print an error message and exit. + if test "x$tmp_drive" = x; then +@@ -148,13 +151,13 @@ + gnu*) + if echo $tmp_part | grep "^s" >/dev/null; then + tmp_pc_slice=`echo $tmp_part \ +- | sed "s%s\([0-9]*\)[a-g]*$%\1%"` ++ | sed "s%s\([0-9]*\)[a-z]*$%\1%"` + tmp_drive=`echo "$tmp_drive" \ + | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` + fi +- if echo $tmp_part | grep "[a-g]$" >/dev/null; then ++ if echo $tmp_part | grep "[a-z]$" >/dev/null; then + tmp_bsd_partition=`echo "$tmp_part" \ +- | sed "s%[^a-g]*\([a-g]\)$%\1%"` ++ | sed "s%[^a-z]*\([a-z]\)$%\1%"` + tmp_drive=`echo "$tmp_drive" \ + | sed "s%)%,$tmp_bsd_partition)%"` + fi +@@ -336,6 +339,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 +457,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 -Nur grub-0.97/util/grub-install.in.orig grub-0.97-patched/util/grub-install.in.orig +--- grub-0.97/util/grub-install.in.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/util/grub-install.in.orig 2004-07-24 20:57:31.000000000 +0200 +@@ -0,0 +1,477 @@ ++#! /bin/sh ++ ++# Install GRUB on your drive. ++# Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. ++# ++# This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++# Initialize some variables. ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++sbindir=@sbindir@ ++libdir=@libdir@ ++PACKAGE=@PACKAGE@ ++VERSION=@VERSION@ ++host_cpu=@host_cpu@ ++host_os=@host_os@ ++host_vendor=@host_vendor@ ++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= ++grub_prefix=/boot/grub ++ ++install_device= ++no_floppy= ++force_lba= ++recheck=no ++debug=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" ++else ++ mklog="" ++ mkimg="" ++fi ++ ++# Usage: usage ++# Print the usage. ++usage () { ++ cat <. ++EOF ++} ++ ++# Usage: convert os_device ++# Convert an OS device to the corresponding GRUB drive. ++# This part is OS-specific. ++convert () { ++ # First, check if the device file exists. ++ if test -e "$1"; then ++ : ++ else ++ echo "$1: Not found or not a block device." 1>&2 ++ exit 1 ++ fi ++ ++ # 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%' \ ++ -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%.*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%%'` ++ ;; ++ gnu*) ++ tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` ++ tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; ++ freebsd* | kfreebsd*-gnu) ++ tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' \ ++ | sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%'` ++ tmp_part=`echo "$1" \ ++ | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \ ++ | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"` ++ ;; ++ netbsd* | knetbsd*-gnu) ++ tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([sw]d[0-9]*\).*$%r\1d%' \ ++ | sed 's%r\{0,1\}\(fd[0-9]*\).*$%r\1a%'` ++ tmp_part=`echo "$1" \ ++ | sed "s%.*/r\{0,1\}[sw]d[0-9]\([abe-p]\)%\1%"` ++ ;; ++ *) ++ echo "grub-install does not support your OS yet." 1>&2 ++ exit 1 ;; ++ esac ++ ++ # Get the drive name. ++ tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \ ++ | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'` ++ ++ # If not found, print an error message and exit. ++ if test "x$tmp_drive" = x; then ++ echo "$1 does not have any corresponding BIOS drive." 1>&2 ++ exit 1 ++ fi ++ ++ if test "x$tmp_part" != x; then ++ # If a partition is specified, we need to translate it into the ++ # GRUB's syntax. ++ case "$host_os" in ++ linux*) ++ echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;; ++ gnu*) ++ if echo $tmp_part | grep "^s" >/dev/null; then ++ tmp_pc_slice=`echo $tmp_part \ ++ | sed "s%s\([0-9]*\)[a-g]*$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` ++ fi ++ if echo $tmp_part | grep "[a-g]$" >/dev/null; then ++ tmp_bsd_partition=`echo "$tmp_part" \ ++ | sed "s%[^a-g]*\([a-g]\)$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,$tmp_bsd_partition)%"` ++ fi ++ echo "$tmp_drive" ;; ++ freebsd* | kfreebsd*-gnu) ++ if echo $tmp_part | grep "^s" >/dev/null; then ++ tmp_pc_slice=`echo $tmp_part \ ++ | sed "s%s\([0-9]*\)[a-h]*$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` ++ fi ++ if echo $tmp_part | grep "[a-h]$" >/dev/null; then ++ tmp_bsd_partition=`echo "$tmp_part" \ ++ | sed "s%s\{0,1\}[0-9]*\([a-h]\)$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,$tmp_bsd_partition)%"` ++ fi ++ echo "$tmp_drive" ;; ++ netbsd* | knetbsd*-gnu) ++ if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then ++ tmp_bsd_partition=`echo "$tmp_part" \ ++ | sed "s%\([a-p]\)$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,$tmp_bsd_partition)%"` ++ fi ++ echo "$tmp_drive" ;; ++ esac ++ else ++ # If no partition is specified, just print the drive name. ++ echo "$tmp_drive" ++ fi ++} ++ ++# Usage: resolve_symlink file ++# Find the real file/device that file points at ++resolve_symlink () { ++ tmp_fname=$1 ++ # Resolve symlinks ++ 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 ++ exit 1 ++ fi ++ ++ # Convert relative symlinks ++ case $tmp_new_fname in ++ /*) tmp_fname="$tmp_new_fname" ++ ;; ++ *) tmp_fname="`echo $tmp_fname | sed 's%/[^/]*$%%'`/$tmp_new_fname" ++ ;; ++ esac ++ done ++ echo "$tmp_fname" ++} ++ ++# Usage: find_device file ++# Find block device on which the file resides. ++find_device () { ++ # For now, this uses the program `df' to get the device name, but is ++ # this really portable? ++ 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 ++ exit 1 ++ fi ++ ++ tmp_fname=`resolve_symlink $tmp_fname` ++ ++ echo "$tmp_fname" ++} ++ ++# Check the arguments. ++for option in "$@"; do ++ case "$option" in ++ -h | --help) ++ usage ++ exit 0 ;; ++ -v | --version) ++ echo "grub-install (GNU GRUB ${VERSION})" ++ exit 0 ;; ++ --root-directory=*) ++ rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; ++ --grub-shell=*) ++ grub_shell=`echo "$option" | sed 's/--grub-shell=//'` ;; ++ --no-floppy) ++ no_floppy="--no-floppy" ;; ++ --force-lba) ++ force_lba="--force-lba" ;; ++ --recheck) ++ recheck=yes ;; ++ # This is an undocumented feature... ++ --debug) ++ debug=yes ;; ++ -*) ++ echo "Unrecognized option \`$option'" 1>&2 ++ usage ++ exit 1 ++ ;; ++ *) ++ if test "x$install_device" != x; then ++ echo "More than one install_devices?" 1>&2 ++ usage ++ exit 1 ++ fi ++ install_device="${option}" ;; ++ 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 ++fi ++ ++# Initialize these directories here, since ROOTDIR was initialized. ++case "$host_os" in ++netbsd* | openbsd*) ++ # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub ++ # instead of /boot/grub. ++ grub_prefix=/grub ++ bootdir=${rootdir} ++ ;; ++*) ++ # Use /boot/grub by default. ++ bootdir=${rootdir}/boot ++ ;; ++esac ++ ++grubdir=${bootdir}/grub ++device_map=${grubdir}/device.map ++ ++# Check if GRUB is installed. ++# This is necessary, because the user can specify "grub --read-only". ++set $grub_shell dummy ++if test -f "$1"; then ++ : ++else ++ echo "$1: Not found." 1>&2 ++ exit 1 ++fi ++ ++if test -f "$pkglibdir/stage1"; then ++ : ++else ++ echo "${pkglibdir}/stage1: Not found." 1>&2 ++ exit 1 ++fi ++ ++if test -f "$pkglibdir/stage2"; then ++ : ++else ++ echo "${pkglibdir}/stage2: Not found." 1>&2 ++ exit 1 ++fi ++ ++# Don't check for *stage1_5, because it is not fatal even if any ++# Stage 1.5 does not exist. ++ ++# Create the GRUB directory if it is not present. ++test -d "$bootdir" || mkdir "$bootdir" || exit 1 ++test -d "$grubdir" || mkdir "$grubdir" || exit 1 ++ ++# If --recheck is specified, remove the device map, if present. ++if test $recheck = yes; then ++ rm -f $device_map ++fi ++ ++# Create the device map file if it is not present. ++if test -f "$device_map"; then ++ : ++else ++ # Create a safe temporary file. ++ test -n "$mklog" && log_file=`$mklog` ++ ++ $grub_shell --batch $no_floppy --device-map=$device_map <$log_file ++quit ++EOF ++ if grep "Error [0-9]*: " $log_file >/dev/null; then ++ cat $log_file 1>&2 ++ exit 1 ++ fi ++ ++ rm -f $log_file ++fi ++ ++# Make sure that there is no duplicated entry. ++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 ++ 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 ++ exit 1 ++ fi ;; ++\([hf]d[0-9]*\)) ++ install_drive="$install_device" ;; ++[hf]d[0-9]*) ++ # The GRUB format with no parenthesis. ++ install_drive="($install_device)" ;; ++*) ++ echo "Format of install_device not recognized." 1>&2 ++ usage ++ exit 1 ;; ++esac ++ ++# Get the root drive. ++root_device=`find_device ${rootdir}` ++bootdir_device=`find_device ${bootdir}` ++ ++# Check if the boot directory is in the same device as the root directory. ++if test "x$root_device" != "x$bootdir_device"; then ++ # Perhaps the user has a separate boot partition. ++ root_device=$bootdir_device ++ 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}` ++ ++if test "x$grubdir_device" != "x$root_device"; then ++ # For now, cannot deal with this situation. ++ cat <&2 ++You must set the root directory by the option --root-directory, because ++$grubdir does not exist in the root device $root_device. ++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` ++ ++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` ++ 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 ++ ++# 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 ++ ++if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then ++ cat $log_file 1>&2 ++ exit 1 ++fi ++ ++rm -f $log_file ++ ++# Prompt the user to check if the device map is correct. ++echo "Installation finished. No error reported." ++echo "This is the contents of the device map $device_map." ++echo "Check if this is correct or not. If any of the lines is incorrect," ++echo "fix it and re-run the script \`grub-install'." ++echo ++ ++cat $device_map ++ ++# Bye. ++exit 0 +diff -Nur grub-0.97/util/mkbimage grub-0.97-patched/util/mkbimage +--- grub-0.97/util/mkbimage 2004-07-24 20:57:31.000000000 +0200 ++++ grub-0.97-patched/util/mkbimage 2012-11-11 17:07:12.744730138 +0100 +@@ -1,7 +1,7 @@ + #!/bin/sh + # MaKe a Bootable IMAGE --- 1.44, 2.88 and El Torito no-emulation mode + # C) 2001,2002,2003 Thierry Laronde +-# C) 2001,2002,2003 Robert Millan ++# C) 2001,2002,2003 Robert Millan + + + # This program is free software; you can redistribute it and/or modify +@@ -94,15 +94,13 @@ + display Version information and exit + + Copyright (c) 2001,2002,2003 Thierry Laronde . +-Copyright (c) 2001,2002 Robert Millan . + GPLed." + + version="mkbimage $version_number + +-Written by Thierry Laronde and Robert Millan. ++Written by Thierry Laronde. + + Copyright (c) 2001,2002,2003 Thierry Laronde . +-Copyright (c) 2001,2002,2003 Robert Millan . + + This is free software under the GPL version 2 or later; see the source for + copying conditions. There is NO warranty, not even for MERCHANTABILITY or -- 2.39.2